2016-07-28 7 views
0

ホスト&netNamedPipeBindingでスタートWCFサービスすることはできません私は2つのアプリケーションを使用していは、Windows 7上のWindowsサービスで

  1. WPFデスクトップアプリケーション
  2. Windowsサービス
4.5の.NET Framework上でC#を使用して構築されました

とし、条件に基づいてデータ/オブジェクトの状態を頻繁に共有する必要があるため、IPC(プロセス間通信)アプローチを使用して互いに話したがります。

netNamedPipeBindingを使用したWCFは非常に柔軟な解決策です。私はWCFサーバーとクライアント&を作成し、コンソールアプリケーションで正常にホスティングをテストしました。

このソリューションが機能して以来、WCF ServerがWindowsサービスでホストされたかったのです(私の最終的な要件です)。

私はアプリケーションを正常にホストすることができます(私には目に見えるエラーはないので推測します)が、クライアントに接続することはできません。私はWcfTestClient.exeツール(Visual Studioのデフォルトツール)を使用しましたが、コンソールアプリケーションから接続しようとしましたが、エラーは継続しているので動作していないようです - net.pipeから//メタデータを取得できません:// localhost/TestWCFService/mex。詳細は以下のとおりです。

私は管理者権限でWindowsサービスを登録し、同じユーザーでコンソールアプリケーションテストクライアント& WcfTestClient.exeを実行しました。

当然ながら、私は何かを見逃しています、それを修正していただきありがとうございます。ここで

は、コードですが、私はWCF netNamedPipeBindingサービスをホストするWindowsサービスで使用しています:

protected override void OnStart(string[] args) 
    { 
     try 
     { 
      if (wcfServiceHostObj != null) 
       wcfServiceHostObj.Close(); 

      wcfServiceHostObj = new ServiceHost(typeof(TestWCFService)); 
      wcfServiceHostObj.Open(); 
      EventLog.WriteEntry(ServiceName, "WCF Host - Started Successfully ", EventLogEntryType.Information); 

     } 
     catch (Exception ex) 
     { 
      EventLog.WriteEntry(ServiceName, "exception raised " + ex.InnerException, EventLogEntryType.Error); 
      throw; 
     } 

    } 

エラー:net.pipeからメタデータを取得できません:// localhost /をTestWCFService/MEX場合これはアクセス権を持つWindows(R)Communication Foundationサービスです。指定したアドレスでメタデータの公開を有効にしていることを確認してください。メタデータの公開を有効にする方法については、http://go.microsoft.com/fwlink/?LinkId=65455.WS-MetadataのMSDNのドキュメントを参照してください。ExchangeエラーURI:net.pipe:// localhost/TestWCFService/mexメタデータには解決できない参照が含まれています。 'net.pipe:// localhost/TestWCFService/mex 'メッセージを受け入れることができるnet.pipe:// localhost/TestWCFService/mexでリッスンしているエンドポイントがありませんでした。これは、しばしば不正なアドレスまたはSOAPアクションによって引き起こされます。詳細については、InnerException(存在する場合)を参照してください。パイプエンドポイント 'net.pipe:// localhost/TestWCFService/mex'がローカルマシン上に見つかりませんでした。ここで


私のWCFサーバコンフィグ設定:(コンソールアプリケーションである)クライアント用

<system.serviceModel> 
     <behaviors> 
      <serviceBehaviors> 
       <behavior name="TestWCFServiceNetPipeBehavior"> 
        <serviceDebug includeExceptionDetailInFaults="true" /> 
        <serviceMetadata /> 
       </behavior> 
      </serviceBehaviors> 
     </behaviors> 

     <services> 
      <service behaviorConfiguration="TestWCFServiceNetPipeBehavior" 
       name="WCFHostTest.WCFService.TestWCFService"> 

       <endpoint address="net.pipe://localhost/TestWCFService" binding="netNamedPipeBinding" bindingConfiguration="" 
        name="TestWCFServiceNetPipeEndPoint" contract="WCFHostTest.WCFService.ITestWCFService" > 

       </endpoint> 

       <endpoint address="net.pipe://localhost/TestWCFService/mex" binding="mexNamedPipeBinding" bindingConfiguration="" 
        name="TestWCFServiceMexPipeEndpoint" contract="IMetadataExchange" /> 
       <host> 
        <!--<baseAddresses> 
         <add baseAddress="net.pipe://localhost/TestWCFService" /> 
        </baseAddresses>--> 
       </host> 
      </service> 
     </services> 
    </system.serviceModel> 

、私は、インラインを使用しています。 ここでは、コード

private static void testClient() 
    { 
     try 
     { 
      string address = "net.pipe://localhost/TestWCFService"; 
      NetNamedPipeBinding binding = new NetNamedPipeBinding(NetNamedPipeSecurityMode.None); 
      EndpointAddress ep = new EndpointAddress(address); 

      ITestWCFService channel = ChannelFactory<ITestWCFService>.CreateChannel(binding, ep); 

      using (channel as IDisposable) 
      { 
       channel.SendMessage("First Message"); 
      } 

      Console.ReadLine(); 

     } 
     catch (Exception ex) 
     { 

      Console.Write(ex.InnerException); 
      Console.ReadLine(); 

     } 
+0

イベントログにエントリがありますか?ホストされているWCFサービスに接続しようとするとWindowsサービスが実行されていますか?あなたのクライアントとWindowsサービスの設定ファイルも投稿してください。 – Tim

+0

また、サービスの 'OnStart'メソッドにエンドポイントを追加したり、エンドポイント設定を指定したりすることはありません。 – Tim

+0

イベントログに「WCFホスト - 開始に成功しました」というメッセージが表示されます。つまり、WCFサーバーの起動に問題はありませんでした。 – manvendra

答えて

0

ServiceHostコンストラクターに渡されたいかなるサービスアドレスがないため接続できない可能性が高い理由はあります。

WindowsのサービスであなたのOnStart方法でこれを試してみてください:「WCFホスト - 正常に開始されました」を見て

wcfServiceHostObj = new ServiceHost(typeof(TestWCFService), 
    new Uri[] { "net.pipe://localhost/TestWCFService" }); 

のみServiceHostがエラーを投げていなかったこと。 WCFサービスがメッセージを受信する準備ができているとは限りません。また

、このようなWCFクライアントとusingステートメントを使用して:

using (channel as IDisposable) 
{ 
    channel.SendMessage("First Message"); 
} 

bad practiceと考えられています。

+0

を追加しました。 – manvendra

+0

変更を提案しましたが、同じエラーが発生しました。 – manvendra

関連する問題