2011-11-10 22 views
1

私の現在のシステムでは、IIS経由でホストされているルータサービスと十分以上(約半分がmsmq、残りのtcpを使用)のWCFサービスがあります。私はルータを除いてすべてのサービスをWindowsサービスに移動することを任されてきました。これは、IIS web.configファイルを使用して作成されたのと同じ構成を使用して実行されています。ここでは、以前のコンフィグ(:myservices/wcfserviceサービスの公開キュー):の抜粋ですWCFルータとWindowsサービスでホストされているWCFサービスの間でmsmqを使用する方法

<!--Router Service web.config--> 
    <client> 
    <endpoint address="net.msmq://localhost/MyServices/WCFService.svc" binding="netMsmqBinding" contract="*" name="IWCFService_Msmq" /> 
    </client> 

    <!--Services web.config--> 
    <service behaviorConfiguration="SomeServiceBehavior" name="WCFService"> 
    <endpoint binding="netMsmqBinding" name="IWCFService_Msmq" 
     contract="IWCFService" /> 
    <host> 
     <baseAddresses> 
     <add baseAddress="net.msmq://localhost/MyServices/WCFService" /> 
     </baseAddresses> 
    </host> 
    </service> 

サービスはバインディングnet.tcpを持っており、ルータはMSMQを持っているとして、私は、この作品理由として混乱しています私が尋ねたとき、私はそれが「魔法」だと言われました。私は同様の構成を使用して、私のセットアップ(Windowsサービスへのルータ)と同じことを行うが、エラーメッセージを取得しようとしました:

<!--Router Service web.config--> 
    <client> 
    <endpoint address="net.msmq://localhost/MyServices/WCFService" binding="netMsmqBinding" contract="*" name="IWCFService_Msmq" /> 
    </client> 

    <!--One "other" Services hosted in Windows Service app.config--> 
    <service behaviorConfiguration="SomeServiceBehavior" name="WCFService"> 
    <endpoint binding="netMsmqBinding" name="IWCFService_Msmq" 
     contract="IWCFService" /> 
    <host> 
     <baseAddresses> 
     <add baseAddress="net.tcp://localhost/MyServices/WCFService" /> 
     </baseAddresses> 
    </host> 
    </service> 

これは単に、TCPを使用して、私されているすべての私のサービスとうまく働いていますMSMQでこれを試してみて、Windowsサービスを開始しようと、私は、イベントビューアに次のエラーを取得する:

Service cannot be started. System.InvalidOperationException: Could not find a base address that matches scheme net.msmq for the endpoint with binding NetMsmqBinding. Registered base address schemes are [net.tcp]. 

は、私は、MSMQする新たなんだので、任意の助けいただければと。ありがとう!

更新:

私はルータのweb.configファイルにあるアドレスと一致するように、サービスのapp.config内のベースアドレスを更新しました。私は以前これを試して、それは動作しませんでした。私は後でそれがmsmq自体を "トランザクションキュー"(私たちのセットアップに必要だった)にしなかったためだと分かりました。これが完了したら、すべてがうまくいった!

<!--One "other" Services hosted in Windows Service app.config--> 
    <service behaviorConfiguration="SomeServiceBehavior" name="WCFService"> 
    <endpoint binding="netMsmqBinding" name="IWCFService_Msmq" 
     contract="IWCFService" /> 
    <host> 
     <baseAddresses> 
     <add baseAddress="net.msmq://localhost/MyServices/WCFService" /> 
     </baseAddresses> 
    </host> 
    </service> 

答えて

1

すべてのMSMQサービスに自分の設定とすべてのtcpサービスが自分自身のものを与えるのはなぜですか?この問題は明らかに、msmqのバインディングを選択したときにベースアドレスを探し、msmqバインディングを見つけることができません。なぜなら、あなたが提供したのはTCPベースアドレスのバインディングだからです。もちろん、baseaddressesノード内でnet.msmqを使用する別のベースアドレスを追加することもできます。

2

InvalidOperationExceptionのエラーメッセージで判断すると、IISでホストされているアプリケーションの詳細設定で有効なプロトコルが "net.tcp"のように見えます。

「net.msmq」は有効なプロトコルですか?

  1. オープンIISマネージャ
  2. アプリケーションを選択してアクションで[詳細設定]をクリックして行動する "net.msmq" を追加
  3. をリスト - 有効なプロトコル
関連する問題