ホスト&netNamedPipeBindingでスタートWCFサービスすることはできません私は2つのアプリケーションを使用していは、Windows 7上のWindowsサービスで
- WPFデスクトップアプリケーション
- Windowsサービス
とし、条件に基づいてデータ/オブジェクトの状態を頻繁に共有する必要があるため、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();
}
イベントログにエントリがありますか?ホストされているWCFサービスに接続しようとするとWindowsサービスが実行されていますか?あなたのクライアントとWindowsサービスの設定ファイルも投稿してください。 – Tim
また、サービスの 'OnStart'メソッドにエンドポイントを追加したり、エンドポイント設定を指定したりすることはありません。 – Tim
イベントログに「WCFホスト - 開始に成功しました」というメッセージが表示されます。つまり、WCFサーバーの起動に問題はありませんでした。 – manvendra