.Net Framework 4.0 を使用して、WCF セルフ ホスト サービスを開発しました。
[ServiceContract(SessionMode=SessionMode.Required)]
[ServiceKnownType(typeof(XmlDocument))]
public interface IMyMSMQ
{
[OperationContract(IsOneWay=true, Action="*")]
void OnMessageReceived(MsmqMessage<XmlDocument> msg);
}
このインターフェースの私のクラスの実装は次のようになります。
public class MyMSMQ : IMyMSMQ, IErrorHandler
{
public void OnMessageReceived(MsmqMessage<XmlDocument> msg)
{
// Log Message To appropriate destination
Logger.LogMessage(msg);
}
}
複数のシナリオを試しました。
シナリオ 1:
- サービスを開始します。
- クライアント アプリを起動します。
- クライアント アプリを使用してキューにメッセージを送信する
- サービスが既にメッセージを読み取っているため、キューにメッセージが取り込まれていないように見えることに注意してください。
- サービスでは他に何も起こらないことに注意してください。
- もう1通メッセージを送る
- メッセージがキューに残っていることに注意してください
シナリオ # 2: これはシナリオ 1 に似ていますが、アプリの開始順序が異なります
- クライアント アプリを起動します。
- クライアント アプリを使用してキューにメッセージを送信する
- サービスが開始されておらず、メッセージを読んでいないため、キューにメッセージが入力されているように見えることに注意してください。
- サービスを開始します。
- メッセージが消えることに注意してください。
- サービスでは他に何も起こらないことに注意してください。
- もう1通メッセージを送る
- メッセージがキューに残っていることに注意してください
サービスが開始されるたびに、メッセージがキューから削除されるため、サービスが実際にメッセージを読み取っているように見えますが、メッセージを読み取ると、どこに送信するか、または何をすべきかを理解できません。