WCF服务的负载平衡错误 - NLB

时间:2009-01-23 23:37:28

标签: wcf iis-6 windows-server-2003 load-balancing nlb

更新3:
我创建了一个Visual Studio 2008测试项目,并尝试创建对共享站点WCF服务引用的服务引用,并收到以下错误:

  

下载时出错   'http://apps.mydomain/MyService.svc'。   请求因HTTP状态而失败   400:错误请求。元数据包含一个   无法解决的参考:   'http://apps.mydomain/MyService.svc'。   内容类型application / soap + xml;   charset = utf-8不受支持   服务   http://apps.mydomain/MyService.svc”。   客户端和服务绑定可能是   不匹配。远程服务器返回   错误:(415)无法处理   消息因为内容类型   “应用程序/肥皂+ xml的;字符集= UTF-8'   不是预期的类型'text / xml;   charset = utf-8'..如果服务是   在当前的解决方案中定义,试试   构建解决方案并添加   服务参考。

更新2:
@Nick - 我尝试过你的建议,明确地用每个服务器的完全限定路径设置每个端点的地址,我仍然得到相同的结果。

此外,当我尝试使用共享站点URL设置listenUri属性时,出现400错误请求错误而不是404错误。

更新
经过一些额外的研究后,http://apps1.mydomainhttp://apps2.mydomain之间存在一些IIS配置设置冲突,并且能够超越“服务器应用程序不可用”错误。

现在,当我尝试浏览共享网站(http://apps.mydomain)时出现404错误,但我可以浏览http://apps1.mydomainhttp://apps2.mydomain服务参考。< / p>

原始问题

我的公司使用Microsoft NLB来加载我们的IIS服务器之间的流量平衡。我最近在每个IIS 6 Windows Server 2003 Standard Edition SP1服务器上部署了一个WCF服务。当我尝试使用IE 7浏览到共享域名时收到以下错误:

  

服务器应用程序不可用   您正在尝试的Web应用程序   目前在此Web服务器上访问   不可用。请点击“刷新”   您的Web浏览器中的按钮重试   你的申请。

     

管理员注意:错误消息   详细说明这一具体原因   请求失败可以在   Web的应用程序事件日志   服务器。请查看此日志条目   发现导致此错误的原因   发生。

消费者将指向http://apps.mydomain以使用该服务,但虚拟域将映射到http://apps1.mydomainhttp://apps2.mydomain。如果我浏览到每台服务器上的服务,我都不会收到该错误。

该服务目前正在使用匿名basicHttpBinding。

还有其他人遇到过这个问题吗?

历史

在此错误开始之前,当我浏览到所有三个域名(http://apps.mydomainhttp://apps1.mydomainhttp://apps2.mydomain)时,我收到以下错误:

  

此集合已包含   地址与方案http。有可以   每个计划最多一个地址   这个系列。

我使用ServiceHostFactory类来自定义.svc文件以指定自定义服务工厂。然后我通过继承ServiceHostFactory并根据需要覆盖来创建我们的自定义工厂。

public class MyFactory : ServiceHostFactory
{
    protected override ServiceHost CreateServiceHost(Type serviceType, Uri[] baseAddresses)
    {
        return new ServiceHost(serviceType, baseAddresses[0]);
    }
}

<%@ ServiceHost Language="C#" Factory="MyFactory" Debug="true" Service="MyService" CodeBehind="~/App_Code/MyService.cs" %>

2 个答案:

答案 0 :(得分:2)

在我的WCF服务和使用应用程序的不同配置进行了一些实验之后。我在使用应用程序中创建了对其中一个工作服务引用(http://apps1.mydomainhttp://apps2.mydomain)的服务引用。然后我将客户端配置中的端点引用更改为指向共享站点WCF地址(http://apps.mydomain),然后我就可以使用和使用该服务。

答案 1 :(得分:1)

我之前遇到过WCF和负载均衡问题,其中服务器有多个具有不同IP地址的网卡,而WCF只会记录它找到的第一个IP地址。我们必须在每个服务器的服务定义上明确设置IP地址,以便WCF绑定到正确的服务定义。