2009-08-24 12 views
7

Me han dicho que wsHttpBinding no es compatible con clientes antiguos que todavía necesitan usar una versión anterior de SOAP. Deseo agregar un punto final BasicHttpBinding en la misma aplicación de servicio WCF para que los clientes puedan usar cualquiera de los puntos finales dependiendo de la tecnología que estén ejecutando. Estoy confundido en cuanto a qué dirección usar para cada uno de ellos. El wsHttpBinding predeterminado no tiene un conjunto de direcciones. ¿Cuál debería ser la dirección para el punto final BasicHttpBinding? ¿La dirección del wsHttpBinding no debería ser (para mi ejemplo) http://localhost/WcfService1/Service1.svc?WCF wsHttpBinding y BasicHttpBinding en la misma aplicación de servicio WCF

Respuesta

16

Hay dos cosas que hay que considerar aquí:

  • si su hosting en IIS (o WAS como parte de IIS7), no puede establecer una dirección base: la dirección base para su servicio será el directorio virtual donde vive el archivo MyService.svc. Todavía puede establecer direcciones relativas, aunque

  • si autohospeda, normalmente agregará direcciones base en su configuración, por lo que puede ahorrarse el tener que deletrear toda la dirección todo el tiempo (pero puede - si deseas hacerlo).

Así que si usted tiene su MyService.svc dentro de un directorio virtual llamado MyApp en su máquina localhost, y luego usar esta configuración:

<service name="MyService" behaviorConfiguration="Default"> 
    <endpoint 
     address="wsHttp" 
     binding="wsHttpBinding" 
     contract="IMyService" /> 
    <endpoint 
     address="basic" 
     binding="basicHttpBinding" 
     contract="IMyService" /> 
</service> 

entonces su servicio basicHttp "viejo estilo" será accesible al :

http://localhost/MyApp/MyService.svc/basic 

y su nuevo wsHttp impulsado servicio será accesible en:

http://localhost/MyApp/MyService.svc/wsHttp 

Puede nombrar esas direcciones relativas (cualquier cosa después de .../MyApp/MyService.svc) lo que quiera, simplemente asegúrese de que sean diferentes entre sí.

Alojamiento en IIS -> ubicación (directorio virtual) de su archivo * .svc se convierte en su dirección base.

Si la auto-anfitrión su servicio dentro de una aplicación de consola o de un servicio de Windows NT, se llega a establecer su base se dirige a sí mismo:

<services> 
    <service name="MyService" behaviorConfiguration="Default"> 
    <host> 
     <baseAddresses> 
     <add baseAddress="http://localhost:8185/Services/" /> 
     </baseAddresses> 
    </host> 
    </service> 
</services> 

Ahora bien, en este caso, su servicio basicHttp "viejo estilo" será accesible en:

http://localhost:8185/Services/basic 

y su servicio impulsado nueva wsHttp será accesible en:

http://localhost:8185/Services/wsHttp 

Puede definir una dirección base para cada uno de los transportes, p. Ej. uno para http: //, uno para net.tcp: // y así sucesivamente.

Y, por supuesto, si realmente debe, también puede definir sus direcciones completas dentro de su elemento <endpoint> para cada uno de los puntos finales del servicio; esto le da flexibilidad total (pero solo funciona en escenarios de autohospedaje).

Marc

+0

¿Es posible tener su punto de wsHttp punto final en el directorio raíz y luego tener la dirección del punto extremo basicHttp para erradicar \ básica? – EbbnFlow

2

En WCF tiene una dirección base y una dirección Enpoint, en su caso, usted puede hacer algo como esto:

<service name="WcfEndpoints.Service1" behaviorConfiguration="WcfEndpoints.Service1Behavior"> 
    <!-- Service Endpoints --> 
    <endpoint address="new" binding="wsHttpBinding" contract="WcfEndpoints.IService1" /> 
    <endpoint address="old" binding="basicHttpBinding" contract="WcfEndpoints.IService1" /> 
    <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange"/> 
</service> 

en cuenta que tendrá un trabajo adicional para el punto final basicHttpBinding trabajar con más edad (asmx) clientes

http://msdn.microsoft.com/en-us/library/ms751433.aspx

Cuestiones relacionadas