2011-03-28 54 views
8

Tengo dos aplicaciones que quiero probar localmente en la misma máquina. Aplicación 1 tiene un servicio WCF simple con la entrada en la configuración folloiwng:WCF - "No había ningún punto final escuchando en ..." error

<service behaviorConfiguration="MyNamespace.ContainerManagementServiceBehavior" 
     name="MyNamespace.ContainerManagementService"> 
    <endpoint address="ContainerManagementService" binding="basicHttpBinding" 
    name="ContainerManagementbasicHttpEndpoint" 
    contract="MyNamespace.IContainer" /> 
    <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" /> 
    <host> 
    <baseAddresses> 
     <add baseAddress="http://localhost:8000/ContainerManagementService" /> 
    </baseAddresses> 
    </host> 
</service>  
<behaviors>  
    <behavior name="MyNamespace.ContainerManagementServiceBehavior"> 
    <serviceMetadata httpGetEnabled="true" /> 
    <serviceDebug includeExceptionDetailInFaults="false" /> 
    </behavior> 
</behaviors> 

que inicie el servicio mediante la ejecución del proyecto de aplicación web en la que se encuentra alojada. Puedo navegar con éxito a la url y obtener la página de información del servicio web, es decir. Copio la misma URL y la uso para mi cliente.

Mi otro cliente, App 2, tiene el siguiente en su fichero de configuración:

<system.serviceModel> 
    <bindings> 
    <basicHttpBinding> 
     <binding name="basicHttp" closeTimeout="00:10:00" 
     openTimeout="00:10:00" receiveTimeout="00:10:00" 
     sendTimeout="00:10:00" allowCookies="false" 
     bypassProxyOnLocal="false" 
     hostNameComparisonMode="StrongWildcard" 
     maxBufferSize="5242880" maxBufferPoolSize="524288" 
     maxReceivedMessageSize="5242880" messageEncoding="Text" 
     textEncoding="utf-8" transferMode="Buffered" 
     useDefaultWebProxy="true"> 
     <readerQuotas maxDepth="32" maxStringContentLength="8192" 
      maxArrayLength="16384" 
      maxBytesPerRead="4096" maxNameTableCharCount="5242880" /> 
     <security mode="None"> 
      <transport clientCredentialType="None" 
      proxyCredentialType="None" realm="" /> 
      <message clientCredentialType="UserName" algorithmSuite="Default" /> 
     </security> 
     </binding> 
    </basicHttpBinding> 
    </bindings> 
    <client> 
    <endpoint 
     address="http://localhost:3227/Services/ContainerManagementService.svc" 
     binding="basicHttpBinding" bindingConfiguration="basicHttp" 
     contract="MyService.IService" name="externalService" />  
    </client> 
</system.serviceModel> 

Sin embargo, cuando trato de ejecutar un cliente de forma llamada WCF para el servicio en ejecución, aparece el siguiente mensaje de error:

There was no endpoint listening at 
http://localhost:3227/Services/ContainerManagementService.svc 
that could accept the message. This is often caused by an incorrect 
address or SOAP action. See InnerException, if present, for more details. 

¿Qué podría estar pasando?

+30

Bienvenido a WCF. –

Respuesta

4

Parece le gusta el tema se debe al hecho de que tanto el servidor y el cliente están siendo ejecutar desde el servidor de Cassini. Estoy cambiando la arquitectura para alojar el punto final del servidor en IIS.

3

¿Tiene dos aplicaciones?

Uno que aloja el punto final del servidor y el otro que es el cliente? ¿Están ambos activos en IIS (considerando que la segunda aplicación es una aplicación web)?

Si tiene dos proyectos para esos dos componentes en su solución, puede configurar VS para iniciar ambos proyectos al mismo tiempo. De esta forma, puede colocar puntos de interrupción tanto en el cliente como en el servidor y ver si realmente el servidor llama al servidor o si la excepción ocurre sin que se llame al método del servidor.

+0

Tengo dos soluciones separadas, una para el Servidor uno para el Cliente. Las soluciones se ejecutan al mismo tiempo. El servidor está activo en IIS. – laconicdev

+0

Si coloca un punto de interrupción en el método de svc.cs, ¿recibe el punto de interrupción o nunca se llama? edit: y dado que tanto el cliente como el servidor están en su máquina, puede hacer que comiencen desde la misma sesión de depuración de VS si tanto el cliente como el servidor están en la misma solución. Si no lo son, puede hacer una solución con ambos para fines de prueba. – Gilles

1

Si el servicio web está en: http://localhost:8000/ContainerManagementService.svc

Su app2 cliente debe señalar en este mismo Addres:

<client> 
     <endpoint address="http://localhost:8000/ContainerManagementService.svc" 
     binding="basicHttpBinding" bindingConfiguration="basicHttp" 
     contract="MyService.IService" name="externalService" />  
</client> 
+0

Lo más probable es que aloje en IIS, y por lo tanto, IIS dictará la URL, en función de dónde vive el archivo * .svc –

+0

No está en http: // localhost: 8000/ContainerManagementService.svc lo que me lleva a otra pregunta: Parece que el elemento se ignora en mi escenario. ¿Por qué? ¿Y dónde se usa? – laconicdev

Cuestiones relacionadas