Я столкнулся с этой проблемой несколько дней назад. На самом деле у меня та же ситуация, которую Рю описал в своем вопросе. У нас есть один виртуальный каталог для многих клиентов, но у каждого из них есть своя привязка. Как "http://company1.product.com"," http://company2.product.com" и т. Д.
Описанное решение здесь работает. Но какова цена! Мы должны менять web.config каждый раз, когда нам нужно добавить новую привязку. А также web.config должен содержать префикс абсолютного пути
как <add prefix=”http://company1.product.com”/>
.
Возможно обойти первую проблему. Я написал свой собственный CustomHostFactory для службы WCF, где я динамически добавляю конечные точки. И эти конечные точки я извлекаю из привязок IIS (есть способ получить информацию из IIS).
Вот пример кода:
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;
}
И вместо жесткого кодирования URL-адресов конечных точек их можно получить из IIS.
Но ServiceHost создается один раз при запуске приложения. Поэтому, если вам нужно добавить новую привязку, вам нужно перезапустить IIS. Это не решение для нас.
Именно поэтому мы решили перейти на asmx (как описано здесь ).
И дождитесь выпуска Framework 4.0, где должны поддерживаться несколько привязок.