0

Msmq<string>メッセージをキューに追加するために使用しているnetMsmqBindingを使用するWCFサービスがあります。メッセージは正常に追加され、コンピューター管理コンソールを介してキューに表示されます。

キューからメッセージを取得しようとしている別の WCF サービスがあります。ここで問題が発生しています。メッセージがキューに追加されるたびにサービスのメソッドが呼び出されます (そのビットは正常に動作しています) が、Msmq<string>メッセージにはすべて null 値が含まれているようです。

そこからメッセージを取得する方法がわかりませんMsmq<string>。これが私のサービスの詳細です...どんな助けにも感謝します..

[ServiceContract]
[ServiceKnownType(typeof(Msmq<string>))]
public interface IMessageListener
{
   [OperationContract(IsOneWay = true, Action = "*")]
    void ListenForMessage(Msmq<string> msg);
}

public class MessageListener : IMessageListener
{
    [OperationBehavior(TransactionScopeRequired = false, TransactionAutoComplete = true)]
    public void ListenForMessage(MsmqMessage<string> msg)
    {
         //this gets called and seems to remove the message from the queue, but message attributes are all null
    }
}
4

1 に答える 1

2

MSMQ を介した WCF のアイデアを十分に「理解」していないと思います。

netMsmqBinding で WCF を使用する場合、MSMQ の詳細を処理する必要はありません。WCF ランタイムに処理させてください。

したがって、基本的に、アプローチは他の WCF サービスと同じでなければなりません。

  • サービス コントラクトとそのメソッド (操作コントラクト) を定義します。
  • データ構造を として定義し、[DataContract]それらをサービス メソッドで使用します。
  • サービスを実装する

したがって、サービスは次のようになります。

[DataContract]
public class Customer
{
   [DataMember]
   public int ID { get; set; }

   [DataMember]
   public string Name { get; set; }

   ...
}

[ServiceContract]
public interface ICustomerService
{
    [OperationContract(IsOneWay=true)]
    void SaveCustomer(Customer myCustomer)

    [OperationContract(IsOneWay=true)]
    void CreateCustomer(int ID, string name);
}

データを記述するデータ コントラクトが必要です。データだけでここでは MSMQ の詳細は必要ありません。次に、オブジェクトを処理するサービス メソッドのセットを 1 つ用意する必要があります。Customerオブジェクトをキューに入れて保存したり、新しいオブジェクトを作成したりできます。

次に、このサービス コントラクトのクライアント側とサーバー側を実装すると、WCF ランタイムが MSMQ トランスポートのすべての詳細を処理し、ペイロード (Customerオブジェクト) を MSMQ メッセージに入れ、それを再び取得します。 . 本当に、それに対処する必要はありません。

于 2011-02-25T05:43:02.567 に答える