2016-12-12 12 views
1

メッセージをMSMQキューに送信するようにクライアントコードを構成しようとしています。 https://msdn.microsoft.com/en-us/library/ms789008(v=vs.100).aspx?cs-save-lang=1&cs-lang=csharpと私のクライアントコードは、以下のようになります:私はここで説明する手順に従っmsmqIntegrationBinding経由でmsmqキューにメッセージを送信する

class Program 
{ 
    static void Main(string[] args) 
    { 
     var binding = new MsmqIntegrationBinding("MyMessagesBinding"); 
     var address = new EndpointAddress(@"msmq.formatname:DIRECT = OS:.\private$\MyMessages"); 
     var channelFactory = new ChannelFactory<IDataRelayService>(binding, address); 
     var channel = channelFactory.CreateChannel(); 

     while (true) 
     { 
      var message = new MyMessage 
      { 
       Content = "this is content!!!", 
       Id = "random uuid" 
      }; 
      var msmqWrapper = new MsmqMessage<MyMessage>(message) 
      { 
       Priority = MessagePriority.Highest 
      }; 

      channel.PassMessage(msmqWrapper); 
      Console.WriteLine("message sent"); 
      Console.ReadLine(); 
     } 
    } 
} 

App.configファイル:

<?xml version="1.0" encoding="utf-8"?> 
<configuration> 
    <startup> 
    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.6.1" /> 
    </startup> 
    <system.serviceModel> 
    <client> 
     <endpoint name="MyResponseEndpoint" 
       address="msmq.formatname:DIRECT=OS:.\private$\MyMessages" 
       binding="msmqIntegrationBinding" 
       bindingConfiguration="MyMessagesBinding" 
       contract="Client.IDataRelayService"> 
     </endpoint> 
    </client> 
    <bindings> 
     <msmqIntegrationBinding> 
     <binding name="MyMessagesBinding"> 
      <security mode="None" /> 
     </binding> 
     </msmqIntegrationBinding> 
    </bindings> 
    </system.serviceModel> 
</configuration> 

IDataRelayService.cs:

[ServiceContract] 
public interface IDataRelayService 
{ 
    [OperationContract(IsOneWay = true, Action = "*")] 
    void PassMessage(MsmqMessage<MyMessage> message); 
} 

IDataRelayServiceChannel.cs:

public interface IDataRelayServiceChannel : IDataRelayService, System.ServiceModel.IClientChannel 
{ 
} 

コンパイルと実行に問題はありませんが、evetビューアを開くと、MSMQのイベントが記録されません。コンピュータ管理ツールを開いてキューを表示すると、キューに0個のメッセージが表示されます。私はここで間違って何をしていますか?

EDIT:

私は、MSMQのトレースイベントを有効にして、ここでイベントビューアが私を示しているものです。

enter image description here

+0

メッセージが送信者のマシンに保存されているようです。クライアントマシン上のMSMQサービスを確認し、一時的な送信キューを探します。あなたのメッセージがその上にあるはずです。 –

+0

どうすればわかりますか?私はコンピュータ管理/メッセージキューを見ていて、私のキューにはメッセージが保持されていないのがわかります。万が一、他のツールについて話していますか? –

+0

発信キューを調べていますか? –

答えて

0

あなたの問題はほぼ確実なアクセス許可の関連です。

サービスは、メッセージの送信者が下のに送信しようとしているキューに、次のMSMQ権限を持っている必要があります実行しているアカウント:

  • メッセージ送信
  • プロパティ
  • が権限
をゲット

送信者が受信者と異なるドメインにある場合は、これらのアクセス許可をANONYMOUS_LOGONというローカルユーザーに付与する必要があります。

また、MSMQ E2Eイベントログを有効にします。https://technet.microsoft.com/en-us/library/cc730882(v=ws.11).aspx。これは何が起こっているのかを伝えるべきです。

キューの両端にWCFがある場合は、msmqIntegrationBindingではなくnetMsmqBindingを使用する必要があります。

+0

すべてのコードとmsmq –

+0

@SzwornyDziąch - キューのアクセス許可を確認してください。実行中のアカウントにキューを完全に制御する権限を与えます。 –

+0

明日は仕事場に戻ってきて、それがうまくいくなら - この回答を受け入れてください。 –

関連する問題