Zusammenfassung
Wie greife ich auf einen lokalen WCF-Dienst zu, wenn dieser in IIS auf Azure gehostet wird? Azure bindet localhost oder 127.0.0.1 nicht an meine Website.
Details
Ich habe eine ASP.Net-Anwendung auf Azure gehostet. Ich habe eine .svc und einige Workflows hinzugefügt, die ich über WCF verwenden möchte. Um die Sache einfach zu halten, ruft meine Web-App einfach den Dienst auf localhost auf, also habe ich Endpunkte wie diese in web.config;
Das funktioniert auf meinem lokalen Rechner einwandfrei. Das Problem ist, dass wenn ich dies in Azure veröffentliche, die Website in IIS keine Bindung zu localhost erhält, sondern die Bindungen immer zur tatsächlichen IP-Adresse des Servers. Am Ende sieht es in applicationHost.config so aus:
%Vor%Sobald meine Webanwendung versucht, den Dienst auf localhost (oder 127.0.0.1) aufzurufen, schlägt sie sofort fehl. Unnötig zu sagen, wenn ich zum Server rdpp und ändern Sie die Bindung dann alles in Ordnung ist.
Was ich wirklich seltsam finde, ist die Tatsache, dass es viele Beispiele gibt, wo Leute auf den lokalen Host auf Azure zugreifen, so dass ich nicht herausfinden kann, warum das so ist. Ich habe das eingestellt osFamily zu 2 und um dies zu debuggen, habe ich Web-Publishing und Remote-Desktop-Zugriff aktiviert, die theoretisch in der Lage sind, Dinge durcheinander zu bringen.
Was ich schon gesehen habe
Okay, so habe ich es gelöst. IMHO ist es ein Hack, aber es funktioniert zumindest.
Grundsätzlich muss ich eine Bindung "*" hinzufügen, damit ich das in Powershell machen kann. Das allgemeine Rezept ist hier: Ссылка
Das betrifft das Hinzufügen von Named Pipes-Unterstützung, aber das Prinzip ist das gleiche. Ich habe gerade das Powershell-Skript in:
geändert %Vor%Damit kann ich jetzt Ссылка verwenden, um auf meinen Dienst zuzugreifen.
Hinweis: Sie müssen dem Rest des Rezepts folgen, um einen erhöhten Ausführungskontext festzulegen und den Powershell-Ausführungsmodus zu ändern. Folgen Sie ihm daher genau
Sie müssen die Endpunktadresse dynamisch erstellen.
Schritt 1: In Ihrer ServiceDefinition.csdef müssen Sie einen Endpunkt deklarieren.
%Vor%Schritt 2: Wenn Sie den Service anrufen möchten
%Vor%Tags und Links wcf azure workflow-foundation-4