我目前正在IIS中的MVC应用程序中托管WCF服务。
路线:
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.Add(new ServiceRoute("api/SitemapService", new MyServiceHostFactory(), typeof(IMyService)));
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
}
服务主机工厂:
public class MyServiceHostFactory : ServiceHostFactory
{
public override ServiceHostBase CreateServiceHost(string constructorString, Uri[] baseAddresses)
{
//I figured I could use the baseAddresses here to determine the tenant being requested, but baseAddresses is always the first binding in IIS.
}
}
在IIS中,我有两个绑定:
local.wcftest.com:80
localtenant.wcftest.com:80
我有一个覆盖CreateHostService方法的ServiceHostFactory实现。在此方法中,我们收到baseAddresses
。无论我在web.config
中尝试过什么配置,我都无法获得使用正确基址的服务实例。 baseAddresses
始终包含1个地址,并且是IIS中列出的第一个绑定的地址。在这种情况下,baseAddress很重要,因为基于租户,我需要向服务注入一个具有正确注册的IoC容器。
这是我可以实现的吗?我觉得我已经尝试了很多东西,但我不确定在这一点上还有什么可以尝试,并且觉得这应该是一件简单的事情。
我在web.config中确实有multiSiteBindingsEnabled为true。