【问题标题】:C# IIS Hosted WCF service doesn't generate client endpointsC# IIS 托管 WCF 服务不生成客户端终结点
【发布时间】: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


    【解决方案1】:

    答案:使用基于 SOAP 的端点绑定,而不是基于 REST 的

    端点绑定有两种不同的类型:SOAP 和 REST。您的服务可以将两者都包含在 web.config 文件中,只要它们具有不同的地址,但只有 SOAP 端点会在 WSDL 中列出。不需要额外的设置或配置,只要是受支持的类型,服务就会自动获取这些信息。

    webHttpBinding 是一个基于 REST 的端点绑定。它适用于使用该服务的 JSON/JavaScript 客户端,但不会在 WSDL 中列出。

    basicHttpBinding 是一个基于 SOAP 的端点绑定。它适用于 C# 客户端。如果您使用 Visual Studio 添加服务引用,它会自动将这些端点添加到您的 app.config 文件中,因为该信息已在 WSDL 中列出,所以它可以执行此操作。

    感谢@nodots 让我指明了正确的方向。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-01-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-10-15
      • 1970-01-01
      • 1970-01-01
      • 2012-10-24
      相关资源
      最近更新 更多