1

Web を検索しましたが、問題の解決策が見つかりません。

nettcpbinding を使用して、XP でサービスを自己ホストしています。構成ファイルは次のとおりです。

<system.serviceModel>

    <diagnostics>
      <messageLogging logMalformedMessages="true" logMessagesAtServiceLevel="true"
        logMessagesAtTransportLevel="true" />
    </diagnostics>

    <serviceHostingEnvironment aspNetCompatibilityEnabled="false" />

    <services>       
 <service behaviorConfiguration="behaviorconfig"
        name="myservice">
         <host>
          <baseAddresses>
            <add baseAddress="net.tcp://10.1.3.186:8001/myService" />
          </baseAddresses>
        </host>
        <endpoint address=""
               binding="netTcpBinding"
               bindingConfiguration="BindingConfiguration"
               contract="xxx.ISomeService" />

        <endpoint address="mex" binding="mexTcpBinding" contract="IMetadataExchange" />       
      </service>
 </services>
    <bindings>
           <netTcpBinding>
        <binding name="BindingConfiguration" receiveTimeout="10:00:00"
          sendTimeout="10:00:00" maxBufferSize="65536" maxReceivedMessageSize="65536"
          transferMode="Streamed">
          <readerQuotas maxDepth="65536" maxStringContentLength="65536"
            maxArrayLength="65536" maxBytesPerRead="97108864" maxNameTableCharCount="65536" />
          <security mode="None" />
        </binding>
      </netTcpBinding>
    </bindings>
    <behaviors>
      <serviceBehaviors>
        <behavior name="behaviorconfig">
          <serviceMetadata />
          <serviceDebug includeExceptionDetailInFaults="true" />
        </behavior>

      </serviceBehaviors>
    </behaviors>
  </system.serviceModel>

そしてセルフホストコードは

Uri tcpUrl = new Uri("net.tcp://10.1.3.186:8001/myService");
            //Create ServiceHost
            ServiceHost host
            = new ServiceHost(typeof(xxx.SomeService), tcpUrl);
            //Add a service endpoint
            host.AddServiceEndpoint(typeof(xxx.ISomeService)
            , new NetTcpBinding(), "");
            //Enable metadata exchange

            ServiceMetadataBehavior smb = new ServiceMetadataBehavior();
            smb.HttpGetEnabled = false;
            host.Description.Behaviors.Add(smb);
            //Start the Service
            host.Open();

サービス参照を追加しようとすると、「エラー: メタデータを net.tcp://10.1.3.186:8001/myService/mex から取得できません」というエラーが表示されます

ここで何が問題なのですか?

4

2 に答える 2

3

mex エンドポイントが欠落しているようです:

host.AddServiceEndpoint(typeof(IMetadataExchange),MetadataExchangeBindings.CreateMexTcpBinding(), "mex");

明確にするために若干の改訂: mex エンドポイントは、サービスで利用可能なものに関する情報を交換できるようにするために必要です。これをメインの TCP リスナーに追加します。http ベースのサービス (wsdl など) を使用すると、自動的に追加されます。

于 2012-04-06T16:53:20.157 に答える
0

これらを確認してください:

  1. 非 HTTP アクティベーション: http://msdn.microsoft.com/en-us/library/ms731053(VS.100).aspx
  2. Windows Service Net.Tcp Listener Adapterが実行されていることを確認します
于 2012-04-05T09:51:42.367 に答える