2011-10-31 10 views
8

Estoy aprendiendo wcf y no puedo entender una cosa muy básica.wcf endpoint relative address

Estoy creando un servicio WCF que quiero que se aloje en IIS al igual que la aplicación web con su propia ruta como http://myhost/myapp/ y todo.

estoy creando el proyecto de servicio WCF en VS, tengo un archivo *.svc describirlo, entonces definir un criterio de valoración sencilla a ella de esa manera:

<endpoint address="" 
      binding="basicHttpBinding" 
      contract="wcf_service_auth.IPshService" /> 

Luego publico este servicio como una Aplicación web de IIS a un directorio virtual, supongamos que es el nombre psh_pub, por lo que puedo acceder al servicio a través de la url http://localhost/psh_pub/pshservice.svc/. Me muestra la página de saludos de WCF y me da un enlace a WSDL, que me da una descripción correcta de wsdl.

Eso está bien.

El siguiente paso: deseo agregar un punto final MEX. Añado a config:

<endpoint address="mex" 
      binding="mexHttpBinding" 
      contract="IMetadataExchange"/> 

eso está bien también, el punto final es accesible en la dirección http://localhost/psh_pub/pshservice.svc/mex y WcfTestClient.exe me da configuración correcta de esa URL.

Aquí viene el problema.

Tengo un servicio WCF que funciona bajo IIS y quiero agregarle un punto final más. Por ejemplo, que sea un punto final net.tcp. El IIS está configurado por defecto para aceptar conexiones en el puerto net.tcp 808 y estoy añadiendo net.tcp protocolo a las propiedades de mi aplicación web, y quiero añadir un punto final a mi servicio como eso:

<endpoint address="" 
      binding="netTcpBinding" 
      contract="wcf_service_auth.IPshService" /> 

y ahora Supongo que mi servicio debe ser accesible a través de la url net.tcp://localhost:808/psh_pub/pshservice.svc. Pero no lo es. Y cada "cómo" y el manual en la web dice que yo debería especificar la dirección completa en el archivo de configuración de esa manera:

<endpoint address="net.tcp://localhost:808/psh_pub/pshservice.svc" 
      binding="netTcpBinding" 
      contract="wcf_service_auth.IPshService" /> 

Y si lo hago, funciona. Pero si alojo el servicio en otro directorio virtual, tendré que cambiar la configuración. Si lo albergo en el otro servidor, tendré que cambiar la configuración. Si lo albergo en varios servidores, tendré que mantener tantas configuraciones como servidores tengo.

Así las principales preguntas es:

¿Hay alguna forma de WCF para especificar una (o https) punto final de un servicio WCF alojado en IIS net.tcp sin especificar URL absoluta para ello?

Respuesta

7

Debería poder definir una dirección base para sus terminales de servicio net.tcp:

<service name="YourServiceName"> 
    <host> 
     <baseAddresses> 
      <add baseAddress="net.tcp://localhost:808/psh_pub/" /> 
     </baseAddresses> 
    </host> 

Entonces usted debe ser capaz de utilizar las direcciones relativas en sus puntos finales reales:

<endpoint name="Tcp01" 
      address="pshservice.svc" 
      binding="netTcpBinding" 
      contract="wcf_service_auth.IPshService" /> 
</service> 
+0

no sé lo que acabo de hacer, pero tengo un punto final net.tcp en funcionamiento con un parámetro de "dirección" vacío. de todos modos, gracias por la ayuda. – pushist1y

4

Activación sin archivos WCF (.Net 4.0) le permitirá registrar bajo una ruta de acceso virtual en relación con el atributo relativeAddress:

<system.serviceModel> 
    <serviceHostingEnvironment> 
    <serviceActivations> 
     <add relativeAddress="relative-virtual-path/yourservice.svc" 
      service="YourServiceImpl" /> 
    </serviceActivations> 
    </serviceHostingEnvironment> 
</system.serviceModel> 

en relación con la dirección base de la aplicación web

este enlace habla de ello: http://msdn.microsoft.com/en-us/library/ee354381.aspx

+0

archivo-menor activación me permite deshacerse de archivo .svc, pero no puedo ver cómo se puede ayudar a evite especificar la dirección de host absoluta para el punto final net.tcp. ¿Extraño algo? – pushist1y

+0

@ pushist1y Hay un atributo llamado relativeAddress en las activaciones del servicio que le permite especificar una ruta virtual relativa para acceder a su servicio. ¿Esto no funciona para ti? – Craig