排查 Windows Communication Foundation 教程入门

本文提供针对执行教程:Windows Communication Foundation 应用程序入门中的步骤时可能遇到的常见问题和错误的解决方案。

常见问题

无法在硬盘上找到项目文件。

Visual Studio 将项目文件保存在 C:\Users\user name\source\repos 中。<>

找不到 Svcutil.exe 生成的 App.config 文件。

在 Visual Studio 中,默认情况下,“添加现有项”窗口仅显示具有以下扩展名的文件:

  • .cs
  • .resx
  • .settings
  • .xsd
  • .wsdl

若要显示所有文件类型,请在“添加现有项”窗口右下角的下拉列表中选择“所有文件 (*.*)”。

常见错误

编译服务应用程序

'GettingStartedHost.Module1' 中找不到错误 C30420 'Sub Main'

Visual Basic 应用程序的入口点不正确。 进行下列更改:

  1. 在“解决方案资源管理器”窗口中选择“GettingStartedHost”文件夹,然后从快捷菜单中选择“属性”。 a. 在“GettingStartedHost”窗口中,对于“启动对象”,从列表中选择“Service.Program”(或特定应用程序的入口点)。 b. 在主菜单中,选择“文件”>“全部保存”。

运行服务应用程序

HTTP 无法注册 URL“http://+:8000/GettingStarted/CalculatorService”。 进程不具有此命名空间的访问权限。

若要进行适当的访问,请使用管理权限启动托管 Windows Communication Foundation (WCF) 服务的进程:

  • 对于 Visual Studio,请在“开始”菜单中选择 Visual Studio 程序,然后从快捷菜单中选择“更多”>“以管理员身份运行”。
  • 对于控制台窗口:在“开始”菜单中选择“命令提示符”,然后从快捷菜单中选择“更多”>“以管理员身份运行”。
  • 对于 Windows 资源管理器:选择可执行文件,然后从快捷菜单中选择“以管理员身份运行”。

编译客户端应用程序

“CalculatorClient”不包含“<方法名称>”的定义,并且找不到可接受类型为“CalculatorClient”的第一个自变量的扩展方法“<方法名称>”(是否缺少 using 指令或程序集引用?)

仅公开了用 ServiceOperationAttribute 特性标记的方法。 如果在 ICalculator 接口中忽略方法中的 ServiceOperationAttribute 特性,你将在编译期间收到此错误消息。

找不到类型名称或命名空间名称 'CalculatorClient'(是否缺少 using 指令或程序集引用?)

如果不将 generatedProxy.cs(或 generatedProxy.vb)文件添加到客户端项目(使用 Svcutil.exe 工具生成它们时),则会收到此错误。

运行客户端应用程序

未处理的异常:System.ServiceModel.EndpointNotFoundException:无法连接到 'http://localhost:8000/GettingStarted/CalculatorService'。 TCP 错误代码 10061: 由于目标计算机主动拒绝,未能建立连接。

如果在未先启动服务的情况下运行客户端应用程序,则会出现此错误。 首先,运行主机应用程序以启动该服务,然后运行客户端应用程序。

使用 Svcutil.exe 工具

“Svcutil”不能被识别为内部或外部命令、可运行程序或批处理文件”。

Svcutil.exe 必须位于系统路径中。 最简单的解决方案是使用 Visual Studio 命令提示。 从“开始”菜单中选择“Visual Studio <版本>”目录,然后选择“VS <版本>开发人员命令提示”。 对于 Visual Studio 中附带的所有工具,此命令提示均能将系统路径设置为正确的位置。

运行服务和客户端应用程序

System.ServiceModel.Security.SecurityNegotiationException:针对目标 'http://localhost:8000/GettingStarted/CalculatorService' 的与 'http://localhost:8000/GettingStarted/CalculatorService' 的 SOAP 安全性协商失败

此错误发生在已加入域但没有网络连接的计算机上。 将计算机连接到网络,或者同时关闭客户端和服务的安全性。

关闭安全性:

  • 对于服务,请将创建 WSHttpBinding 的代码替换为以下代码:

    // Step 3: Add a service endpoint.
    selfhost.AddServiceEndpoint(typeof(ICalculator), new WSHttpBinding(SecurityMode.None), "CalculatorService");  
    
  • 对于客户端,在配置文件中,更新<绑定>元素下的<安全性>元素,如下所示:

    <binding name="WSHttpBinding_ICalculator">
      <security mode="None" />
    </binding>
    

另请参阅

WCF 应用程序入门
WCF 疑难解答快速入门
安装问题疑难解答