在IIS中设置多个主机标头时,WCF ServiceHost BaseAddresses不包含所有IIS主机标头值

时间:2012-05-11 20:16:45

标签: .net wcf iis iis-6

我有一个长期工作的WCF服务,托管在IIS6(Windows Web Server 2003)中。

我正在尝试在IIS中添加第二个主机头值(之前只有1个)。

现在在IIS中,假设我已配置:

IP: All Available, Port: 80, Host: x.test.com
IP: All Available, Port: 80, Host: y.test.com

在我的应用程序中,我设置了此WCF配置属性:

<serviceHostingEnvironment multipleSiteBindingsEnabled="true">
</serviceHostingEnvironment>

我有一个自定义ServiceHostFactory

public class MySuperServiceHostFactory : ServiceHostFactory
{
    protected override ServiceHost CreateServiceHost(Type serviceType, Uri[] baseAddresses)
    {
        //...
    }
}

在参数Uri[] baseAddresses中,无论第一个值是否在IIS配置中,WCF似乎只会传递给我。因此,对于此示例,baseAddressesUri[1],其值为http://x.test.com/MyService.svc


如果我在IIS中指定HTTP HTTPS主机头,则会发生同样的情况。回到同一个例子,假设我们设置了HTTP流量:

IP: All Available, Port: 80, Host: x.test.com
IP: All Available, Port: 80, Host: y.test.com

对于SSL流量,我们运行命令:

  

cscript.exe c:\ Inetpub \ AdminScripts \ adsutil.vbs set / w3svc / 12345 / SecureBindings“:443:secureA.test.com”“:443:secureB.test.com”

所以现在我的网站应该有4个可能的地址。

但是现在WCF只是从连接的每个类型传递第一个主机,所以我的Uri[]现在包含2个元素:

http://x.test.com/MyService.svc
https://secureA.test.com/MyService.svc

任何人都知道为什么会这样?


修改

最底层的“How can WCF support multiple IIS Binding specified per site ?”链接说:

  

.Net Fx4.0中的解决方案:BaseAddressPrefixFilters

     

Beta2修复

     

在.NET Framework的当前Beta2版本中,我们添加了支持   用于多站点绑定。只需在IIS站点中设置绑定即可   服务将继承地址

     

最终RTM修复

     

在最后一点中,由于应用,我们决定将其作为选择加入   兼容性原因。为了启用多个站点绑定,您   需要在应用程序中将multipleSiteBindingEnabled设置为true。   仅支持Http协议的多站点绑定。地址   配置文件中的端点需要是完整的URI。什么时候   将3.0或3.5变通方法移植到4.0,您需要保留它   特别方面。

<serviceHostingEnvironment multipleSiteBindingsEnabled="true" />

最后一点是我正在做的事情。我正在使用.NET4添加的功能在IIS中设置多个主机头,并在我的配置中设置multipleSiteBindingsEnabled="true"

如果您单独留下WCF的其余部分并让它为构造服务端点做默认操作,这实际上可以正常工作。

但是,我的问题是所有多个主机头实际上都没有传递到自定义ServiceHostFactory实现,所以在所有基地址上手动设置自己的端点似乎很困难或不可能。

也许这只是.NET 4中的一个错误?

1 个答案:

答案 0 :(得分:0)

在自定义类中,您手动添加其他端点吗?我确实相信你需要手动设计的方式......

请参阅http://msdn.microsoft.com/en-us/library/ms751515.aspx

有了这个概念,似乎如果EndPoint是配置,那么它将被添加给你。由于您的配置为空,您必须手动添加端点。

请参阅WCF Self Host Service - Endpoints in C#