修复: WCF 为 WSDL 文档中的 Uri 引用不可访问的内部实例而不是到负载平衡器在 Windows Server 2003 和 Windows XP、 Windows Vista 和 Windows Server 2008 中的.NET Framework 3.0 中按预期方式

文章翻译 文章翻译
文章编号: 971842 - 查看本文应用于的产品
展开全部 | 关闭全部

本文内容

症状

当您在 Windows Server 2003、 Windows XP、 Windows Vista 和 Windows Server 2008 中的 Microsoft.NET Framework 3.0 中的负载平衡的情况下使用 Windows 通信基础 (WCF) 服务时,您会遇到一个或多个下列问题:

问题 1

请考虑以下情形:
  • 对于 Microsoft Visual Studio 设置 Windows Azure SDK 和 WindowsAzure 工具。
  • 您创建的 WebCloud 服务项目,并添加 Windows 通信基础 (WCF) serviceto 项目。
  • 在调试中开发结构的项目。
  • 对 Web 服务定义语言 (WSDL) 文档的 WCFservice Youbrowse。
在此方案中,您注意到 WSDL 文档中的 Uri 引用不可访问的内部 Web 站点实例 (http://127.0.0.1:5001/Service.svc?wsdl)。但是,您希望 Uri 负载平衡器 (http://127.0.0.1:81/Service.svc?wsdl),请参阅将 WSDL 文档中。此外,当您尝试添加对服务的引用时,您收到中失败的通知 添加服务引用对话框。

问题 2

请考虑以下情形:
  • 承载 WCF 服务 aload 平衡器后面的实例上。
  • 使用"添加服务引用"命令或svcutil.exe命令行工具从服务下载元数据。
在这种情况下,当您尝试从元数据中,生成代理时过程失败,因为元数据包含 Uri 该引用内部 Web 站点实例。

原因

因为从外部访问的负载平衡器时,就会发生"症状"一节中描述的问题。但是,负载平衡器后面的内部 Web 站点实例不可用。

解决方案

注意如果您在 Windows 7 上,或在 Windows Server 2008 R2 上使用.NET Framework 3.5 Service Pack 1,则以下基于 Microsoft 知识库文章中安装的修补程序描述:
977420 修补程序汇总包,可在窗口通信基础.NET Framework 3.5 SP1 的 Windows 7 中,并为 Windows Server 2008 R2 中修复的问题

热修复补丁程序信息

可以从 Microsoft 获得支持的热修复补丁程序。但是,此修补程序仅能用于解决本文中描述的问题。此热修复补丁程序仅适用于正出现此特定问题的系统。此修补程序可能会接受进一步的测试。因此,如果这个问题没有对您造成严重的影响,我们建议您等待包含此修复程序的下一个软件更新。

若要从 MSDN 代码库下载此修补程序,请访问下面的 Microsoft 网站:
http://code.msdn.microsoft.com/KB971842

注意MSDN 代码库显示获取此修复程序的语言。如果看不到列出的语言,则代码库的资源页不可用这种语言的版本。

注意如果出现其他问题或需要任何故障诊断,您可能需要创建单独的服务请求。到其他支持问题和事项,对于此特定的修补程序不需要将照常收取支持费用。Microsoft 客户服务和支持电话号码,或创建单独的服务请求的完整列表,请访问下面的 Microsoft 网站:
http://support.microsoft.com/contactus/?ws=support

先决条件

要应用此修补程序,必须具有.NET Framework 3.5 Service Pack 1 (SP1) 或.NET Framework 3.0 Service Pack 2 (SP2) 安装在以下操作系统之一:
  • Windows XP
  • Windows Server 2003
  • Windows Vista SP2
  • Windows Server 2008 SP2

注意有关此修补程序的 Windows 7 或窗口 Server 2008 R2 版本,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:
981002 修补程序汇总包用于 Windows.NET Framework 3.5 SP1 的 Windows 7 和 Windows Server 2008 R2 中的通信基础

重新启动要求

应用此修补程序后,不需要重新启动计算机。

修补程序替换信息

此修补程序不替代任何其他修补程序。

文件信息

此修补程序的英文版具有的文件属性 (或更新的文件属性) 下表中列出。这些文件的日期和时间以协调世界时 (UTC) 显示。当您查看文件信息时,它已转换为本地时间。要了解 UTC 与本地时间之间的时差,请在控制面板中的日期和时间项中使用时区选项卡。
基于 x86 的 Windows XP 和 Windows Server 2003 的版本
收起该表格展开该表格
文件名称文件版本文件大小日期时间平台
Servicemonikersupport.dll3.0.4506.445617,2562009 年 12 月 08-23:03x86
Smdiagnostics.dll3.0.4506.4456110,5922009 年 12 月 08-23:03x86
System.identitymodel.dll3.0.4506.4456438,2722009 年 12 月 08-23:03x86
System.runtime.serialization.dll3.0.4506.4456970,7522009 年 12 月 08-23:03x86
System.servicemodel.dll3.0.4506.44565,984,2562009 年 12 月 08-23:03x86
System.servicemodel.washosting.dll3.0.4506.4456327682009 年 12 月 08-23:03x86
基于 x64 的 Windows XP 和 Windows Server 2003 的版本
收起该表格展开该表格
文件名称文件版本文件大小日期时间平台
Servicemonikersupport.dll3.0.4506.445619,3042009 年 12 月 08-22:24x64
Smdiagnostics.dll3.0.4506.445694,2082009 年 12 月 08-22:24x64
System.identitymodel.dll3.0.4506.4456397,3122009 年 12 月 08-22:24x64
System.runtime.serialization.dll3.0.4506.4456847,8722009 年 12 月 08-22:24x64
System.servicemodel.dll3.0.4506.44565,324,8002009 年 12 月 08-22:24x64
System.servicemodel.washosting.dll3.0.4506.4456327682009 年 12 月 08-22:24x64
基于 x86 的 Windows Vista SP2 和 Windows Server 2008 SP2 版本
收起该表格展开该表格
文件名称文件版本文件大小日期时间平台
Servicemonikersupport.dll3.0.4506.414317,2402009 年 7 月-08-12:26x86
System.runtime.serialization.dll3.0.4506.4143970,7522009 年 7 月-08-12:26x86
System.servicemodel.dll3.0.4506.41435,939,2002009 年 7 月-08-12:26x86

基于 x64 的 Windows Vista SP2 和 Windows Server 2008 SP2 版本
收起该表格展开该表格
文件名称文件版本文件大小日期时间平台
Servicemonikersupport.dll3.0.4506.414319,2882009 年 7 月-08-12:26x64
System.runtime.serialization.dll3.0.4506.4143847,8722009 年 7 月-08-12:26x64
System.servicemodel.dll3.0.4506.41435,275,6482009 年 7 月-08-12:26x64

基于 Itanium 的 Windows Server 2008 SP2 版本
收起该表格展开该表格
文件名称文件版本文件大小日期时间平台
Servicemonikersupport.dll3.0.4506.414333,6402009 年 7 月-08-12:27IA-64
System.runtime.serialization.dll3.0.4506.4143847,8722009 年 7 月-08-12:26IA-64
System.servicemodel.dll3.0.4506.41435,275,6482009 年 7 月-08-12:26IA-64

状态

Microsoft 已经确认这是在"适用于"一节中列出的 Microsoft 产品中的问题。

更多信息

若要启用此修补程序,在安装后,您必须配置 WCF 服务使用下列服务行为:
<serviceBehaviors>
   <behavior name="<name>">
     <useRequestHeadersForMetadataAddress>
       <defaultPorts>
          <add scheme="http" port="81" />
          <add scheme="https" port="444" />
        </defaultPorts>
      </useRequestHeadersForMetadataAddress>
   </behavior>
</serviceBehaviors>

注意<name></name> 是一个占位符,您应该具有行为的名称替换 WCF 服务中。

此修复程序会导致 WCF 使用传入的元数据请求的"主机"HTTP 标头生成正确的 URI。在这种情况下,"主机"标头中包含的负载平衡器地址,而不是内部节点地址。

如果 WSDL 文档内部的 URI 具有不同于"主机"头 URI 的方案的方案,例如,如果通过 HTTPS 提到的请求的元数据,但元数据包含 HTTP Uri 时,此热修复程序需要端口号的不同方案。每个方案中可以指定端口号<defaultPorts>部分。</defaultPorts>

属性

文章编号: 971842 - 最后修改: 2013年11月23日 - 修订: 8.0
这篇文章中的信息适用于:
  • Microsoft .NET Framework 3.0
  • Microsoft .NET Framework 3.0 Service Pack 1
  • Microsoft .NET Framework 3.0 Service Pack 2
关键字:?
kbexpertiseadvanced kbsurveynew kbqfe kbmt KB971842 KbMtzh
机器翻译
重要说明:本文是由 Microsoft 机器翻译软件进行的翻译并可能由 Microsoft 社区通过社区翻译机构(CTF)技术进行后期编辑,或可能是由人工进行的翻译。Microsoft 同时向您提供机器翻译、人工翻译及社区后期编辑的文章,以便对我们知识库中的所有文章以多种语言提供访问。翻译的文章可能存在词汇、句法和/或语法方面的错误。Microsoft 对由于内容的误译或客户对内容的使用所导致的任何不准确、错误或损失不承担责任。
点击这里察看该文章的英文版: 971842
Microsoft和/或其各供应商对于为任何目的而在本服务器上发布的文件及有关图形所含信息的适用性,不作任何声明。 所有该等文件及有关图形均"依样"提供,而不带任何性质的保证。Microsoft和/或其各供应商特此声明,对所有与该等信息有关的保证和条件不负任何责任,该等保证和条件包括关于适销性、符合特定用途、所有权和非侵权的所有默示保证和条件。在任何情况下,在由于使用或运行本服务器上的信息所引起的或与该等使用或运行有关的诉讼中,Microsoft和/或其各供应商就因丧失使用、数据或利润所导致的任何特别的、间接的、衍生性的损害或任何因使用而丧失所导致的之损害、数据或利润不负任何责任。

提供反馈

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com