wcf - titel - Wie ändere ich die WSDL-URL vom internen Computernamen in public?




title tag wordpress (2)

Ich habe einen einfachen Dienst, den ich für Azure bereitgestellt habe. Es ist erreichbar über:

http://xxxxxxxxxxxxxxxxxxxxxxx.cloudapp.net/MyTestService.svc

Die URL zur WSDL verwendet den internen Computernamen anstelle eines öffentlichen DNS:

svcutil.exe http://rd001520d328923a/MyTestService.svc?wsdl

Offensichtlich ist die WSDL damit von außerhalb der Maschine nicht erreichbar.

Ich bin mir einiger Dinge bewusst, die geändert werden können, wenn Sie dies in IIS ausführen oder wenn Sie die URL des Dienstes kennen. Zum Beispiel die <serviceMetadata> httpGetUrl ändern, um die httpGetUrl Eigenschaft anzugeben, aber das wird nicht funktionieren, da ich die absolute URL einschließen müsste. Bei Verwendung einer relativen URL wird weiterhin der interne Computername verwendet. Das eigentliche Problem ist, dass die WSDL URL-Verweise mit dem Computernamen enthält und sie daher unbrauchbar macht.

Es gibt zwei Substandard-Problemumgehungen:

  • Es wurde vorgeschlagen, dass ich die WSDL schnappen, sie bearbeiten könnte, um die URLs zu korrigieren, und sie dann hochladen, sodass sie von einer anderen URL aus zugänglich ist.

  • Ich fand einen Hotfix von Anfang 2010 war verfügbar, aber es muss einen besseren Weg geben.

Wie kann dies gelöst werden, um den öffentlichen DNS anstelle des Computernamens zu verwenden?


Der Blogpost, der Anforderungsheader für Metadatenadresse verwendet, ist ähnlich
answer , erklärt aber, dass Standard-Ports optional sind und weggelassen werden können:

<system.serviceModel>
  <behaviors>
       <serviceBehaviors>
          <behavior>
            <useRequestHeadersForMetadataAddress/>
          </behavior>
        </serviceBehaviors>
  </behaviors>
</system.serviceModel>

Es zeigt auch, wie das Verhalten im Code aktiviert wird.

sh.Description.Behaviors.Add(new UseRequestHeadersForMetadataAddressBehavior());

Generieren Sie die WSDL, um sie zu veröffentlichen, oder versuchen Sie nur, eine Referenz in einem anderen Projekt hinzuzufügen?

Wenn es der spätere ist, ist mein Vorschlag, den WCF ChannelFactory-Ansatz zu verwenden, anstatt "Servicereferenz hinzuzufügen". Ich finde, es gibt mir konsistentere kontrollierbare Ergebnisse.

http://msdn.microsoft.com/en-us/library/ms734681.aspx

Ich muss hinzufügen, ich habe dies nicht auf Azure versucht.