0

Windows サービス (windowsservices.cs) を含むプロジェクトを作成し、そのクラス (windowservices.cs) に wcf コントラクトとサービス ファイルを追加しました。その app.config ファイルには

<service behaviorConfiguration="WindowsService1.Service1Behavior"
    name="AgentSvcImpl">
    <endpoint address="" binding="netTcpBinding" bindingConfiguration=""
      name="nethttpendpoint" contract="IAgentWinService">
      <identity>
        <dns value="localhost" />
      </identity>
    </endpoint>
    <endpoint address="mex" binding="mexTcpBinding" bindingConfiguration=""
      name="nethttpmetadataendpoint" contract="IMetadataExchange" />
    <host>
      <baseAddresses>
        <add baseAddress="net.tcp://localhost:8011/AgentSvcImpl" />
      </baseAddresses>
    </host>
  </service>

Windows サービスの onstart メソッドで、次のコードを入力しました。

    ServiceHost serviceHost = null;
        if (serviceHost != null)
        {
            serviceHost.Close();
        }
        //Create a URI to serve as the base address
        Uri httpUrl = new Uri("net.tcp://localhost:8011/AgentSvcImpl");
        //Create ServiceHost
        serviceHost = new ServiceHost(typeof(WindowsService1.AgentSvcImpl), httpUrl);
        //Add a service endpoint
         serviceHost.AddServiceEndpoint(typeof(WindowsService1.IAgentWinService), new NetTcpBinding(), "");
        //Enable metadata exchange
         ServiceMetadataBehavior smb = new ServiceMetadataBehavior();
         smb.HttpGetEnabled = false;
         serviceHost.Description.Behaviors.Add(smb);
        //Start the Service
        serviceHost.Open();

このサービスをservices.mscで開始すると、うまく開始されました。しかし、サービス参照を追加しようとすると、次のエラーが発生します。

メタデータに解決できない参照が含まれています: 'net.tcp://localhost:8011/AgentSvcImpl'。ソケット接続が中止されました。これは、メッセージの処理中にエラーが発生したか、リモート ホストが受信タイムアウトを超過したか、基になるネットワーク リソースの問題が原因である可能性があります。ローカル ソケットのタイムアウトは「00:04:59.0054016」でした。既存の接続がリモート ホストによって強制的に閉じられました サービスが現在のソリューションで定義されている場合は、ソリューションを構築して、サービス参照を再度追加してみてください。

これを解決するには?

4

2 に答える 2

0

この投稿を見てください: HttpGetEnabled = false を設定するとどうなりますか

動作の HttpGetEnabled プロパティを有効にする必要があると思います。

smb.HttpGetEnabled = true;

希望が助けになります。

于 2013-10-03T13:22:47.903 に答える
0

考えられる問題 - 名前空間のないサービス名とコントラクト:

<service ... name="WindowsService1.AgentSvcImpl" ... contract="WindowsService1.IAgentWinService">

そうでない場合: WCF サービス実装 (AgentSvcImpl) クラス スコープ内に新しいタイマーを作成し、無限でない間隔 (例: 1 秒) と空の OnTimer ハンドラーを作成してみてください。さらに詳しく調べるためにトレースを構成する

于 2013-10-03T10:57:47.770 に答える