Verwenden von WCF auf Localhost in Azure

8

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;

%Vor%

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

  • Ich kann die Endpunktadresse in meinem Code zur Laufzeit neu schreiben, um localhost für die tatsächliche Adresse zu ersetzen, oder den Endpunkt dynamisch erstellen, wie von Ron in den Antworten beschrieben. Leider verwende ich den WCF-Routing-Service, um Workflows zu versionieren. Dies bedeutet, dass mein Code den Router-Endpunkt aufruft und der WCF-Router abwechselnd den eigentlichen Service / Workflow aufruft, der einen in web.config angegebenen Endpunkt verwendet. Ich habe keine Kontrolle über die Endpunktauflösung der Routing-Dienste, ohne, denke ich, eine ganze Reihe von Routing-Logik zu schreiben, die einfach eine Menge Arbeit zu sein scheint, wenn ich nur localhost aufrufen will:)
  • Wechsel zur Verwendung von Named Pipes; Leider verursacht es einige seltsame Probleme mit Arbeitsabläufen, wahrscheinlich aufgrund von Duplexdruck, und ich habe eine Frist, so dass ich keine Zeit habe, um dem auf den Grund zu gehen.
Frans 02.12.2011, 07:59
quelle

2 Antworten

1

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

    
Frans 02.12.2011, 15:32
quelle
4

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%     
Ron Jacobs 02.12.2011 16:54
quelle