2009-10-07 2 views
5

Ich habe einen ASP.NET-Webdienst auf IIS, der auf Port 8080 arbeitet. Auf Port 80 habe ich Apache, das einige Websites an IIS umleitet.ASP.NET-Webdienst ändert Port auf Invoke

In diesem Fall kann ich auf die Web-Service-Seite (http://example.com/service/) zugreifen, die mir alle verfügbaren Methoden zur Verfügung stellt. Wenn ich jedoch versuche, eine Methode aufzurufen, wird eine Webseite wie diese aufgerufen: http://example.com:8080/service/Service1.asmx/Method. Natürlich kann ein öffentlicher Zugang kein Ergebnis sehen, der Port 8080 ist gesperrt und kann nicht geöffnet werden.

Intern arbeitet der Web-Service auf Port 8080, aber die öffentliche Aufforderung müssen den Port 80

Jeder getan werden weiß, wie kann ich mein Problem lösen?

PS: Mit IIS 7 und Apache 2.2 unter Windows Server 2008

+0

Welche url sind Sie auf dem Client die WSDL zu erhalten verwenden? – Kev

Antwort

3

Der wahrscheinlichste Grund dafür ist, dass Ihre Web-Dienst generiert WSDL wird die Service-Endpunkt-Adresse als definieren:

http://example.com:8080/service/service1.asmx

Sie können eine separate statische WSDL-Definition angeben und den folgenden Abschnitt ändern, um Port 80 zu verwenden:

<wsdl:service name="Service1"> 
    <wsdl:port name="Service1Soap" binding="tns:Service1Soap"> 
     <soap:address location="http://example.com:8080/service/service1.asmxx" /> 
    </wsdl:port> 
    <wsdl:port name="Service1Soap12" binding="tns:Service1Soap12"> 
     <soap12:address location="http://example.com:8080/service/service1.asmx" /> 
    </wsdl:port> 
</wsdl:service> 

Dies sollte dazu führen, dass der Client die WSDL konsumiert und Stubcode generiert, um an den richtigen Port zu binden (der Apache-Server fungiert als Proxy).

Ein weiteres alternatives Verfahren die richtige Adresse zu zwingen, in der generierten WDSL erscheinen soll ein SoapExtensionReflector verwenden, um die Adresse location on the fly zu ändern:

Modify a Web Service's WSDL Using a SoapExtensionReflector

ich die oben verwendet haben Methode erfolgreich in der Vergangenheit.

Alternativ könnten Sie, wenn der Client .NET basiert, überschreiben Sie die Basis-URL für den Service:

WebClientProtocol.Url Property (MSDN Library)

+0

Ich habe bereits die SoapExtensionReflector-Lösung implementiert. Es könnte funktionieren, wenn Sie die WSDL konsumieren, aber in diesem Beispiel verwende ich den von ASP.NET generierten Client, der versucht, den Dienst auf Port 8080 zu nutzen, aber keine Berechtigungen dafür hat! –

+0

Welche URL verwenden Sie, um die WSDL auf dem Client zu erhalten? – Kev

+0

Im Moment funktioniert der Web Service mit der WSDL Datei sehr gut, weil ich den Port in der WSDL geändert habe. Das von ASP.NET generierte Webinterface funktioniert jedoch nicht, da es immer noch den falschen Port verwendet (8080). –