He creado un servicio web WCF en C# implementado en un EXE de servicio de Windows que funciona en gran medida del modo que yo quiero. Lo estoy usando de manera autohospedada (no dentro de IIS).Confundido por el uso del nombre de host en el archivo WSDL en el servicio web C#
Para hacer que un archivo WSDL esté disponible para el servicio web Java que llama, agregué ServiceMetadataBehavior a la creación del host. es decir:
ServiceHost host = new ServiceHost(typeof(MyService));
ServiceMetadataBehavior smb = new ServiceMetadataBehavior();
smb.HttpGetEnabled = true;
host.Description.Behaviors.Add(smb);
host.Open();
Todo funcionó bien hasta que cambie mi servicio a otro servidor con un nombre de host diferente. Cuando me conecto al WSDL (http: // prod-server: 55000/MyService? Wsdl), veo que el nombre de host del servidor de desarrollo está codificado en el WSDL.
Aquí hay un fragmento del WSDL como se ve en un navegador:
<wsdl:definitions name="MyService" targetNamespace="http://tempuri.org/">
<wsdl:import namespace="MyProject.ServiceContracts" location="http://dev-server:55000/MyService?wsdl=wsdl0"/>
<wsdl:types/>
He comprobado todo el código C# en el proyecto, y el nombre del servidor de desarrollo no está codificado en cualquier lugar.
En el archivo app.config, tengo el siguiente definido:
<system.serviceModel>
<services>
<service name="MyService">
<endpoint address="http://localhost:55000/MyService" binding="basicHttpBinding"
bindingConfiguration="" contract="MyProject.ServiceContracts.IMyInterface" />
<host>
<baseAddresses>
<add baseAddress="http://localhost:55000/MyService" />
</baseAddresses>
</host>
</service>
</services>
Yo esperaría que esto daría como resultado el nombre de la máquina localhost ser sustituido, pero persiste como la caja de desarrollo nombre en el cual el servicio fue originalmente creado/desplegado. ¿Estoy equivocado?
También busqué la posibilidad de especificar explícitamente una ruta a mi archivo WSDL, pero por lo que puedo deducir, esto solo se puede hacer si se aloja el servicio en IIS.
Por último y puramente por curiosidad, me pregunto si realmente se crea un archivo WSDL real (quiero decir, un archivo físico en el disco) o si se representa dinámicamente con cada solicitud.
Tenga en cuenta que el nombre de host en el WSDL es solo una pista. No pretende ser la URL del punto final, necesariamente. Se espera que el cliente configure la URL del punto final con el que desea comunicarse. –