3

netTcpBinding と basicHttpBinding で同じインターフェイスを利用できるようにしたいと考えています。また、両方のエンドポイントで wsdl を利用できるようにしたいと考えています。にアクセスするhttp://localhost:9876/TestService/と、 にある Tcp エンドイントの情報を持つ mex エンドポイントを取得します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>
4

2 に答える 2

1

それは私の側の新人の間違いです。それは実際には正しいです。答えは以下の投稿にあります。基本HTTPクラスに到達したときにのみブラウザーから応答が返されますが、このwsdlを使用すると、両方のバインディングに接続できます。

于 2010-12-11T02:20:02.527 に答える
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" />

スラッシュなしで試してみてください!そのように動作するはずです。

于 2010-12-10T20:42:32.200 に答える