Tengo un servicio WCF alojado dentro de un servicio de Windows. El servicio de Windows tiene un método OnStart
así:Problema con el servicio WCF de alojamiento en un servicio de Windows
protected override void OnStart(string[] args)
{
serviceHost = new ServiceHost(typeof (RouterService));
serviceHost.Open();
}
Es bastante escaso ahora, ya que estoy tratando de encontrar el problema. Como no he procesado ningún error aquí, cualquier excepción en este punto debería haber detenido el inicio correcto del servicio. Comenzaría y luego se detendría automáticamente de nuevo.
Mi archivo de configuración para el servicio WCF tiene el siguiente aspecto:
<?xml version="1.0"?>
<configuration>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/>
</startup>
<system.serviceModel>
<services>
<service name="WcfService.RouterService"
behaviorConfiguration="serviceBehavior" >
<endpoint address="RouterService" contract="WcfService.IRouterService" binding="wsHttpBinding" bindingConfiguration="NoSecurity" />
<endpoint address="mex" contract="IMetadataExchange" binding="mexHttpBinding" />
<host>
<baseAddresses>
<add baseAddress="http://localhost:8000"/>
</baseAddresses>
</host>
</service>
</services>
<bindings>
<wsHttpBinding>
<binding name="NoSecurity">
<security mode="None" />
</binding>
</wsHttpBinding>
</bindings>
<behaviors>
<serviceBehaviors>
<behavior name="serviceBehavior" >
<serviceMetadata httpGetEnabled="true" />
<serviceDebug includeExceptionDetailInFaults="true"/>
</behavior>
</serviceBehaviors>
</behaviors>
</system.serviceModel>
</configuration>
Además, he añadido el usuario de servicio de red (que se ejecuta el servicio como para ser capaz de escuchar a HTTP en el puerto especificado :..
netsh http add urlacl url=http://+:8000/ user="NETWORK SERVICE"
Ahora, en el cliente, elijo Add Service Reference
puedo encontrar el servidor, y VS también se las arreglo para crear la configuración y hacer que los archivos proxy a continuación, en el interior del cliente, hago una instancia de la representación , y ábrelo. Todo sigue bien. Pero sobre c alling el primer método en proxy, obtengo la siguiente excepción:
El servicio HTTP ubicado en http://localhost:8000/RouterService está demasiado ocupado.
Sé que mi cliente es el único que está intentando conectarse a este servicio, entonces ¿por qué aparece este mensaje de error? ¿Y cómo puedo solucionar esto? No se apaga cuando intenta llamar al método, arroja la excepción casi de inmediato.
EDITAR
Ok, ahora descubrí que mi TestServer (no el cliente de Windows, pero una aplicación de consola) también se da el mismo error. Hoy no fue así, y ni el servicio WCF ni el TestServer han cambiado.
Luego intenté cambiar el puerto a 8080 en lugar de 8000, y funcionó. Luego intenté lo mismo con el servicio de Windows, y eso también funcionó (después de ejecutar el comando netsh http
en el nuevo puerto)
Así que algo le ha sucedido a http en el puerto 8000 por algún motivo. He intentado reiniciar el sistema también, por supuesto.
Esto me deja perplejo, así que si alguien tiene alguna idea de lo que está pasando aquí, lo agradecería.
¿Qué tipo devuelve su servicio? He visto este problema en servicios que devuelven tipos no personalizables. También podría ser un problema con el grupo de aplicaciones para el host de servicio que no se inicia o algo así. – Henric
Acepto con @daft que el servicio puede no devolver un tipo de datos debido a problemas de serialización. El grupo de aplicaciones, si corresponde, no debería ser una preocupación, ya que es el mismo grupo (al menos en IIS) que sirve el wsdl/config que le permite generar la clase proxy (que ha realizado correctamente). – Smudge202
+1 para aclarar el problema del grupo de aplicaciones. Gracias mancha. – Henric