5

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

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

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

此外,当我尝试使用共享站点 URL 设置 listenUri 属性时,我收到 400 bad request 错误而不是 404 错误。

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

现在,当我尝试浏览到共享站点 ( http://apps.mydomain ) 时出现 404 错误,但我能够浏览到http://apps1.mydomainhttp://apps2.mydomain服务参考。

原始问题

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

服务器应用程序不可用 您尝试在此 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" %>
4

2 回答 2

2

After some experimenting with different configurations for my WCF service and consuming application. I created a service reference to one of the working service references (http://apps1.mydomain or http://apps2.mydomain) in the consuming application. Then I changed the endpoint reference in the client configuration to point to the shared site WCF address (http://apps.mydomain) and I was able to consume and use the service.

于 2009-01-29T20:45:23.890 回答
1

I've had an issue before with WCF and load balancing where the servers had multiple Network cards with different IP addresses and WCF would just pic the first IP address it found. We had to explicitly set the IP address on each server's Service Definition so WCF would bind to the right one.

于 2009-01-27T22:55:05.320 回答