2

我有一个运行了很长时间的 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中,WCF 似乎只传递给我 IIS 配置中的第一个值。所以对于这个例子,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 设置 /w3svc/12345/SecureBindings ":443:secureA.test.com" ":443:secureB.test.com"

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

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

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

任何人都知道为什么会发生这种情况?


编辑:

此链接“ WCF 如何支持每个站点指定的多个 IIS 绑定? ”在最底部说:

.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 中的一个错误?

4

1 回答 1

0

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

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

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

请参阅WCF 自托管服务 - C# 中的端点

于 2012-05-20T20:04:56.623 回答