【发布时间】:2015-04-02 19:10:48
【问题描述】:
我在 Visual Studio 2013 中使用 C# 创建了 WCF 服务,并将其托管在 IIS 服务器上。我在新的 WPF 客户端中使用服务时遇到问题,因为添加服务引用后端点丢失。
我可以使用该 URL 访问该服务,它为我提供了说明页面,说明我需要创建一个客户端才能测试该服务。该 URL 在服务器和我的笔记本电脑上都有效。 WSDL 确实存在,我可以查看 XML 结构。 Visual Studio 允许我使用 WSDL URL 添加服务引用,并正确生成代理客户端代码。
添加服务引用不会将任何端点添加到我的客户端的 App.Config 文件中。 WSDL 中的 Ctrl-F 显示 WSDL 中没有任何端点数据。由不同部门托管的另一个服务的 WSDL 确实包含它们的端点,所以我知道它们应该以这种方式列出。
我可以做些什么来让 WSDL 自动将端点配置添加到客户端?我不想为每个新客户端记住端点,或者要求其他人每次都使用该服务向我询问。
根据this MSDN article,我尝试添加一个部分并在该部分中重复端点,重建我的服务,重新启动 IIS 服务器上的主机网站,并更新我的服务引用,但仍未添加端点.
当我在“添加服务引用”对话框中使用“发现”选项时,它确实找到了服务项目,但给出了一个错误,指出 URL 不正确。另一个仅包含样板服务信息的测试解决方案适用于该解决方案中的客户端项目,并将端点添加到客户端配置中。它的 Web.Config 中没有我遇到问题的服务所没有的任何内容。
this question 可能重复,但没有得到答复。
这是来自我的主机网站的 Web.Config 的相关部分(服务的 App.Config 是相同的):
<system.serviceModel>
<client>
<endpoint binding="webHttpBinding"
contract="TestLib.Service.ITestLibService" />
</client>
<services>
<service name="TestLib.Service.TestLibManager">
<endpoint binding="webHttpBinding" contract="TestLib.Service.ITestLibService" />
<endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange"/>
</service>
</services>
<bindings>
<webHttpBinding>
<binding>
<security mode="TransportCredentialOnly">
<transport clientCredentialType="Windows" proxyCredentialType="Windows"/>
</security>
</binding>
</webHttpBinding>
</bindings>
<behaviors>
<serviceBehaviors>
<behavior>
<serviceDebug includeExceptionDetailInFaults="true" />
<serviceMetadata httpGetEnabled="true" />
</behavior>
</serviceBehaviors>
</behaviors>
感谢任何帮助,谢谢!
【问题讨论】:
标签: c# wcf iis visual-studio-2013 wsdl