【问题标题】:WCF endpoint configuration: 2nd endpoint doesn't work at all, 1st endpoint doesn't seem affected by bindingWCF 端点配置:第二个端点根本不起作用,第一个端点似乎不受绑定影响
【发布时间】:2013-02-13 18:59:55
【问题描述】:

在 IIS 中托管的 WCF 服务中,我正在尝试设置多个端点。一种用于 SOAP,一种用于 SOAP12。根据MSDN documentation,我编辑了Web.config 喜欢:

<services>
  <service name="MyNamespace.MyClass">
    <endpoint address="" binding="basicHttpBinding" contract="IContract" />
    <endpoint address="Endpoint2" binding="wsHttpBinding" contract="IContract" />
  </service>
</services>

这似乎没有任何效果。网址上没有答案:

http://localhost:51454/MyClass.svc/Endpoint2

如果我将 IContract 更改为 IContract2,则会收到错误消息:

The service '/MyClass.svc' cannot be activated due to an exception during 
compilation.

所以我正在编辑的Web.config 是正在使用的那个。

将默认地址的绑定从 basicHttpBinding 更改为 wsHttpBinding 没有任何效果。 WSDL 保持不变。

WSDL 包含这一位,这似乎表明它正在使用生成的绑定运行:

<wsdl:service name="TapasSim">
    <wsdl:port name="BasicHttpBinding_IContract" 
               binding="i0:BasicHttpBinding_IContract">
        <soap:address location="http://localhost:51454/MyClass.svc"/>
    </wsdl:port>
</wsdl:service>

为什么 WCF 服务不使用来自Web.config 的配置?
为什么 WCF 不使用 SOAP12 绑定监听 /Endpoint2
为什么默认端点没有从basicHttpBinding 更改为wsHttpBinding

【问题讨论】:

  • 你是如何生成 WSDL 的,使用 svcutil 还是使用 VS。
  • @Dhawalk:当您访问MyClass.svc?wsdl时,WCF 会生成 WSDL
  • 你可以使用 svcutil 来生成 wsdl 吗?我使用 VS 创建服务引用,并且能够从客户端应用程序访问两个端点
  • 好的......没关系,我没有在下面看到你的答案:)
  • @Dhawalk:是的,愚蠢的错字。感谢您的关注! :)

标签: c# wcf wcf-binding


【解决方案1】:

尝试为端点添加一个基本地址:

  <service name="namespace.Service">
    <host>
      <baseAddresses>
        <add baseAddress="http://localhost:51454/myclass.svc"/>
      </baseAddresses>
    </host>

// 端点omnited

或者尝试在地址前添加一个斜杠:

端点地址="/Endpoint2" binding="wsHttpBinding" contract="IContract"

【讨论】:

  • 据我所知,添加这个完全没有效果
  • 可能是配置文件的位置不对?我不知道 IIS 上的正确位置是什么,但我猜它必须靠近 .dll 文件。通常当我遇到这个问题时,这就是原因。
  • 如果我将IContract 更改为IContract2,服务会显示错误消息。所以我很确定它在正确的位置。
  • 公平。很好的测试。我有最后一个猜测 - 检查更新的答案
  • 试过了,没有效果。我已经用 WDSL sn-p 更新了这个问题
【解决方案2】:

MSDN 文章是正确的,您的配置没有任何问题。我使用 VS 创建了一个 WCF 客户端,并且能够使用

成功调用
http://localhost:51454/MyClass.svc/Endpoint2

显然,它不会显示为来自浏览器的有效 url。尝试使用第二个 url 从客户端消费,它应该可以工作

【讨论】:

    【解决方案3】:

    问题在于服务名称:

    <service name="MyNamespace.MyClass">
    

    类名错误。当你输入错误的合约界面时,WCF 会抛出错误。但是一个错误的类名会被默默地忽略。这就解释了为什么它会使用默认配置。

    【讨论】:

      猜你喜欢
      • 2016-05-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-01-11
      • 1970-01-01
      • 2015-06-28
      • 1970-01-01
      • 2011-07-06
      相关资源
      最近更新 更多