2009-07-25 19 views
3

Windowsサービス内でWCFサービスをホストするのに問題があります。 私はVS2008で私のWCFサービスを開始することができますし、私のapp.configをでベースアドレスにWindowsサービス内でWCFサービスをホストする

<configuration> 
    <system.web> 
    <compilation debug="true" /> 
    </system.web> 
    <system.serviceModel> 
    <services> 
     <service behaviorConfiguration="WCF.IndexerBehavior" 
     name="WCF.Indexer"> 
     <endpoint address="" binding="wsHttpBinding" contract="WCF.IIndexer"> 
      <identity> 
      <dns value="localhost" /> 
      </identity> 
     </endpoint> 
     <endpoint address="mex" binding="mexHttpBinding" 
contract="IMetadataExchange" /> 
     <host> 
      <baseAddresses> 
      <add baseAddress="http://localhost/WCFService/Action/" /> 
      </baseAddresses> 
     </host> 
     </service> 
    </services> 
    <behaviors> 
     <serviceBehaviors> 
     <behavior name="WCF.IndexerBehavior"> 
      <serviceMetadata httpGetEnabled="True"/> 
      <serviceDebug includeExceptionDetailInFaults="False" /> 
     </behavior> 
     </serviceBehaviors> 
    </behaviors> 
    </system.serviceModel> 
</configuration> 

をナビゲートすることによって、私はそれが正常に動作します見ることができ、私はどのように上のサービスやコードサンプルを作成したと言ってページを取得します使用してください。

私の次のステップは、上記のWCFをホストするWindowsサービスを作成することでした。

私はちょうど窓のサービステンプレートを使用して、それは私にWindowsServiceHost.csに名前を変更したProgram.csとService1.csを与えました。それで私は持っています:

私はInstallUtil(私はインストーラを定義しました)を実行することができます。 すぐに開始して停止するのに使用されたサービスは、Windows Defenderを無効にしてこれを取り除きました。 サービスは(ネットワークサービスとして)開始し、私は考えていますが、ベースアドレスに移動すると、見つからないページが表示されます。

エラー1061:サービスは、私は午前以外のすべてを試した

現時点でコントロールメッセージを受け付けることができませんが もう一つ奇妙なことは、私は(まだ実行中として表示される)サービスを停止しようとすると、私が手であります途方に暮れて。

+0

サービスは、コマンドライン、つまり自己ホストアプリケーションとして実行できるスタンドアロンの実行可能ファイルとして実行されますか?あなたが説明する方法でWindowsサービスとして実行する前に、これを動作させる必要があります。 この種の問題をデバッグするには、コードの残りの部分が実行される前にVisual Studioデバッガをサービスプロセスにアタッチできるように、OnStartに時間遅延を導入すると便利です。また、例外をWindowsイベントログに取り込むのではなく、そのイベントログに記録することもできます。 –

答えて

3

実際に何が原因であるかを確認するのではなく、私たちは常にWindowsサービスのWCFサービスをホストしており、一般的には問題なく動作します。ただ行動のための感情や問題のための潜在的な手がかりを得るために -

2点あなたが試みることができる:

1)私はあなたがサービスのちょうどタイプでのServiceHostを開く気づく - 動作しますが、あなたはまださえnew ServiceHost()の呼び出しにベースアドレスを追加したいかもしれません - このように:

host = new ServiceHost(serviceType, 
         new Uri("http://localhost:8181/WCFService/Action/"); 

あなたがそのアドレスに移動し、サービスページを取得することはできますか?

2)私は気づいた他の事はあなたのサービスは、typeof演算(で指定されたホストを開く前に)Indexer.WCF.Indexerと呼ばれているように見えるということですが、設定ファイルでは、<service>タグのname=は唯一の「WCF.Indexerです"

あなたはおそらく読むためにそのタグを変更しようとすることができます:

<service behaviorConfiguration="WCF.IndexerBehavior" 
     name="Indexer.WCF.Indexer"> 

はその助けをしていますか?ブラウザでナビゲートするときにサービスページを表示できるようになりましたか?

マルク・

0

がcatch文を削除してください、あなたがWindowsサービスで

1

セルフホスティングHTTPはHttpCfg.exeとエンドポイントの登録を必要とするかもしれ表示されないエラーがあるかもしれません。見てくださいhere

関連する問題