2009-10-07 16 views
5

Tengo un servicio web ASP.NET en IIS, que funciona en el puerto 8080. En el puerto 80 tengo Apache, que está redireccionando algunos sitios web a IIS.El servicio web ASP.NET cambia el puerto en Invoke

En este caso, puedo acceder a la página del servicio web (http://example.com/service/), que me proporciona todos los métodos disponibles. Sin embargo, cuando intento invocar un método, va a una página web como esta: http://example.com:8080/service/Service1.asmx/Method. Por supuesto que un acceso público no puede ver ningún resultado, el puerto 8080 está bloqueado y no se puede abrir.

Internamente, el servicio web funciona en el puerto 8080, pero se deben hacer en el puerto 80.

alguien sabe cómo puedo solucionar mi problema de la solicitud pública?

PS: El uso de IIS 7 y Apache 2.2 en Windows Server 2008

+0

qué URL se está utilizando para obtener el WSDL en el cliente? – Kev

Respuesta

3

La razón más probable para esto es que su servicio web genera WSDL definirá la dirección de punto final de servicio como:

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

Puede proporcionar una definición de WSDL estática separada y modificar la siguiente sección para usar el puerto 80:

<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> 

Esto debería provocar que el cliente consuma el WSDL y genere código de código auxiliar para vincularse al puerto correcto (que es el servidor Apache que actúa como un proxy).

Otro método alternativo para obligar a la dirección correcta para aparecer en el WSDL generado es utilizar un SoapExtensionReflector para modificar la dirección location sobre la marcha:

Modify a Web Service's WSDL Using a SoapExtensionReflector

He utilizado los anteriores método con éxito en el pasado.

Como alternativa, puede, si el cliente se basa .NET, anular la URL base para el servicio:

WebClientProtocol.Url Property (MSDN Library)

+0

Ya he implementado la solución SoapExtensionReflector. Podría funcionar si consume el WSDL, pero en este ejemplo estoy usando el cliente generado desde ASP.NET, que intenta consumir el servicio en el puerto 8080 pero no tiene permisos para hacerlo. –

+0

¿Qué url está utilizando para obtener WSDL en el cliente? – Kev

+0

En este momento, consumir el servicio web utilizando el archivo WSDL funciona bien, porque cambié el puerto en el WSDL. Sin embargo, la interfaz web generada por ASP.NET no funciona porque aún se inmoviliza utilizando el puerto incorrecto (8080). –

Cuestiones relacionadas