2009-09-12 17 views
5

De forma predeterminada, el sitio web de IIS 7 tiene un enlace net.tcp con la cadena de información vinculante "808: ". Si agrego otro enlace net.tcp con la excepción "xxx:" ocurre:Alojamiento del servicio WCF en IIS 7 (WAS) con enlace net.tcp en DOS puertos tcp

Esta colección ya contiene una dirección con el esquema net.tcp. Puede haber como máximo una dirección por esquema en esta colección. Nombre del parámetro: elemento

¿Cómo puedo resolver este problema y escuchar mi servicio en DOS puertos?

Respuesta

8

Básicamente, en su servicio, debe poder definir cualquier cantidad de puntos finales de servicio en cualquier cantidad de puertos.

Hay dos maneras de hacer esto:

  • definir una dirección base de y una dirección relativa en el extremo de servicio
  • definen el dirección completa en cada punto final

Si Si hace la opción n. ° 1, tendrá algo como esto:

<service name="YourService"> 
    <host> 
    <baseAddresses> 
     <add baseAddress="net.tcp://YourServer:5151/Services" /> 
    </baseAddresses> 
    </host> 
    <endpoint name="endpoint1" 
      address="Service1" 
      binding="netTcpBinding" 
      contract="IYourService" /> 
    <endpoint name="endpoint2" 
      address="Service2" 
      binding="netTcpBinding" 
      contract="IYourService" /> 
</service> 

lo tanto, en este caso, tiene dos puntos finales de servicio para el mismo contrato, y van a estar escuchando en las direcciones URL

net.tcp://YourServer:5151/Services/Service1 

y

net.tcp://YourServer:5151/Services/Service2 

Puede tener los extremos de servicio haya numerosas, pero solo una dirección base.

La otra opción es especificar ninguna dirección de base y especificar su dirección de servicio completo en el punto final directamente:

<service name="YourService"> 
    <endpoint name="endpoint1" 
      address="net.tcp://YourServer:5151/Services/Service1" 
      binding="netTcpBinding" 
      contract="IYourService" /> 
    <endpoint name="endpoint2" 
      address="net.tcp://YourServer:6868/Services/Service2" 
      binding="netTcpBinding" 
      contract="IYourService" /> 
</service> 

En este caso, puesto que se está definiendo toda la dirección en el punto final, puede elegir dos puertos TCP diferentes, uno para cada punto final. Esto debería funcionar sin ningún problema. Tiene dos puntos finales separados en dos puertos separados, escuchando y siendo atendido por la misma clase de servicio en segundo plano.

Marc

+1

Leí en alguna parte que baseAddresses se ignora en un iis enivornment. – Konstantin

+0

Estoy de acuerdo con su comentario y proporciono un enlace que lo dice. Cuando se trata de IIS, las direcciones base son básicamente ignoradas, pero el ejemplo anterior aún se mantiene debido a las direcciones de punto final que se proporcionan. Se usan implícitamente con la información de enlace del sitio en IIS. http://msdn.microsoft.com/en-us/magazine/cc163412.aspx – dyslexicanaboko

0

Soy yo de nuevo.

Esto funciona con auto anfitrión

<baseAddresses> 
      <add baseAddress="net.tcp://localhost" /> 
      <add baseAddress="net.tcp://localhost:12345" /> 
</baseAddresses> 

pero con IIS7 + fue motivo excepción

No se pudo conectar a net.tcp: // localhost: 12345/game2.svc. El intento de conexión duró un lapso de tiempo de 00: 00: 02.0936160. Código de error de TCP 10061: no se pudo establecer ninguna conexión porque la máquina de destino la rechazó activamente 127.0.0.1:12345.

La pregunta fue sobre entorno de alojamiento IIS

2

yo estaba tratando de deply un servicio WCF a uno de mis servidores web el otro día y se encontró con un problema.Seguí recibiendo el siguiente mensaje de error: p>

Esta colección ya contiene una dirección con el esquema http. No puede haber como máximo una dirección por esquema en esta colección.Nombre del parámetro: elemento

El problema no ocurrió en mi máquina local sino en el servidor web, por lo que es un poco difícil averiguar qué lo está causando. Sucedió en el servidor porque mi servidor web se encuentra en un entorno de alojamiento compartido, en cuyo caso el servicio WCF también necesita conocer el encabezado del host. Para hacer esto navegué a en el web.config y agregué lo siguiente:

<serviceHostingEnvironment> 
<baseAddressPrefixFilters>  
    <add prefix=http://MyHostHeader /> 
</baseAddressPrefixFilters> 
</serviceHostingEnvironment> 
+1

En .NET 4.0 esto se soluciona a través de

Cuestiones relacionadas