WCF端点配置:第二个端点根本不起作用,第一个端点似乎不受绑定影响

时间:2013-02-12 20:59:15

标签: c# wcf wcf-binding

在IIS中托管的WCF服务中,我正在尝试设置多个端点。一个用于SOAP,一个用于SOAP12。根据{{​​3}},我编辑了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

3 个答案:

答案 0 :(得分:1)

尝试为端点添加基地址:

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

//端点omnited

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

端点地址=“/ Endpoint2”binding =“wsHttpBinding”contract =“IContract”

答案 1 :(得分:1)

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

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

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

答案 2 :(得分:0)

问题是服务名称:

<service name="MyNamespace.MyClass">

班级名称错了。当您输入错误的合同界面时,WCF会抛出错误。但是会默默忽略错误的类名。这就解释了为什么它会回到默认配置上。