WCF服务同时使用basicHttpBinding和netTcpBinding; 无法访问HTTP端点

3
我希望能够使用netTcpBinding和basicHttpBinding提供相同的接口。我还想为两个端点提供wsdl。当我访问http://localhost:9876/TestService/时,我会得到mex端点,该端点具有Tcp端点的信息http://localhost:9876/TestService/?wsdl,但地址http://localhost:9876/TestService/ws没有响应,我不知道原因。我已经有了基本地址和相对地址。可以有人帮我指出缺少什么吗?现在,我只是试图使TestImplementation服务正常工作,并且我还没有涉及MessaginImplementation服务。
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
    <system.serviceModel>
        <bindings>
            <basicHttpBinding>
                <binding name="SimpleBinding" />
            </basicHttpBinding>
            <netTcpBinding>
                <binding name="DefaultTCPBinding" transactionFlow="true" />
            </netTcpBinding>
        </bindings>
        <behaviors>
            <serviceBehaviors>
                <behavior name="MetadataBehavior">
                    <serviceMetadata httpGetEnabled="true" httpGetBinding="webHttpBinding"
                        httpGetBindingConfiguration="" />
                </behavior>
            </serviceBehaviors>
        </behaviors>
        <services>
            <service behaviorConfiguration="MetadataBehavior" name="CompanyX.AppServer.Implementation.TestImplementation">
                <endpoint address="" binding="netTcpBinding" bindingConfiguration="DefaultTCPBinding"
                    name="TestTCPEndpoint" contract="CompanyX.AppServer.Interfaces.ITest" />
                <endpoint address="mex" binding="mexHttpBinding" bindingConfiguration=""
                    name="TestMex" contract="IMetadataExchange" />
                <endpoint address="/ws" binding="basicHttpBinding" bindingConfiguration="SimpleBinding"
                    name="Test" contract="CompanyX.AppServer.Interfaces.ITest" />
                <host>
                    <baseAddresses>
                        <add baseAddress="net.tcp://localhost:9878/TestService" />
                        <add baseAddress="http://localhost:9876/TestService/" />
                    </baseAddresses>
                </host>
            </service>
            <service behaviorConfiguration="MetadataBehavior" name="CompanyX.AppServer.Implementation.MessaginImplementation">
                <endpoint address="" binding="netTcpBinding" bindingConfiguration="DefaultTCPBinding"
                    name="MessagingTCPEndpoint" contract="CompanyX.AppServer.Interfaces.IMessaging" />
                <endpoint address="mex" binding="mexHttpBinding" bindingConfiguration=""
                    name="MessagingMex" contract="CompanyX.AppServer.Interfaces.IMessaging" />
                <host>
                    <baseAddresses>
                        <add baseAddress="net.tcp://localhost:9878/MessagingService" />
                        <add baseAddress="http://localhost:9876/MessagingService" />
                    </baseAddresses>
                </host>
            </service>
        </services>
    </system.serviceModel>
</configuration>
2个回答

1

这是我一个新手错误。实际上它是正确的。答案在下面的帖子中。 当我使用基本的HTTP类时,我只能从浏览器获得响应,但是使用这个wsdl,我可以连接到两个绑定。


0

我怀疑您的服务端点地址是错误的:

<endpoint address="/ws" binding="basicHttpBinding" bindingConfiguration="SimpleBinding"
                name="Test" contract="CompanyX.AppServer.Interfaces.ITest" />

由于它是一个相对地址(添加到您的基地址),因此它应该只是ws - 没有前导斜杠:

<endpoint name="Test" 
          address="ws" 
          binding="basicHttpBinding" bindingConfiguration="SimpleBinding"
          contract="CompanyX.AppServer.Interfaces.ITest" />

尝试不带正斜杠!应该可以那样工作。

我尝试过没有它,但我也没有得到答案。我从这个微软链接中得到了这个:http://msdn.microsoft.com/en-us/library/ms733749.aspx - Pascal
@Pascal:我不确定你基础地址中的尾部斜杠是否会导致问题:<add baseAddress="http://localhost:9876/TestService/" /> - 试着去掉它 - 有任何变化吗?? - marc_s
很抱歉浪费了您的时间。这是一个新手WCF错误。我在下面发布了答案,以供将来有同样疑问的人参考。非常感谢! - Pascal

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接