Me encontré con este problema hace varios días. En realidad, tengo la misma situación que Ryu describió originalmente en su pregunta. Tenemos un directorio virtual para muchos clientes, pero cada uno tiene su propio enlace. Como "http://company1.product.com", "http://company2.product.com" etc.
Solución descrita here funciona. Pero, ¿cuál es el precio? Deberíamos cambiar web.config cada vez que necesitemos agregar un nuevo enlace. Y también web.config debe contener el prefijo de ruta absoluta como <add prefix=”http://company1.product.com”/>
.
Es posible evitar el primer problema. Escribí mi propia CustomHostFactory para el servicio WCF, donde agregué dinámicamente puntos finales. Y estos puntos finales los obtengo de enlaces IIS (hay una forma de obtener información de IIS).
Aquí es código de ejemplo:
protected override ServiceHost CreateServiceHost(Type serviceType, Uri[] baseAddresses)
{
var serviceHost = base.CreateServiceHost(serviceType, baseAddresses);
var webHttpBinding = new WebHttpBinding();
var serviceEndpoint1 = serviceHost.AddServiceEndpoint(typeof(IService), webHttpBinding,
"http://company2.product.com/WCFService/Service.svc");
var serviceEndpoint2 = serviceHost.AddServiceEndpoint(typeof(IService), webHttpBinding,
"http://company1.product.com/WCFService/Service.svc");
var webHttpBehavior = new WebHttpBehavior();
serviceEndpoint1.Behaviors.Add(webHttpBehavior);
serviceEndpoint2.Behaviors.Add(webHttpBehavior);
return serviceHost;
}
Y en lugar de codificar las direcciones URL de punto final, que sould recuperarlas de IIS. Pero ServiceHost se crea una vez cuando se inicia la aplicación. Entonces, si necesita agregar un nuevo enlace, debe reiniciar IIS. No es una solución para nosotros.
Es por eso que decidimos pasar a asmx (como se describe here). Y espere hasta la versión de Framework 4.0, donde deberían admitirse enlaces múltiples.
¿Está alojando su WCF con IIS o está creando un proveedor de alojamiento personalizado? – thaBadDawg
Además, ¿cuál es el problema/problema específico que tiene? Es decir. ¿el servicio no funciona, devuelve respuestas incorrectas (URL) o es que el servicio desconoce qué cliente realiza la llamada? –
estoy alojando con IIS – Ryu