我有一个长期工作的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似乎只会传递给我。因此,对于此示例,baseAddresses
是Uri[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中的一个错误?
答案 0 :(得分:0)
在自定义类中,您手动添加其他端点吗?我确实相信你需要手动设计的方式......
请参阅http://msdn.microsoft.com/en-us/library/ms751515.aspx
有了这个概念,似乎如果EndPoint是配置,那么它将被添加给你。由于您的配置为空,您必须手动添加端点。