我使用 .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);
}
}
我尝试了多种场景。
场景一:
- 启动服务。
- 启动客户端应用程序。
- 使用客户端应用程序将消息发送到队列
- 请注意,队列似乎没有填充消息,因为服务已经读取了消息。
- 请注意,服务中没有其他任何事情发生。
- 再发一条消息
- 请注意,消息留在队列中
场景 #2:这与场景 1 类似,但启动应用程序的顺序不同
- 启动客户端应用程序。
- 使用客户端应用程序将消息发送到队列
- 请注意,队列似乎确实填充了消息,因为服务没有启动并且没有读取消息。
- 启动服务。
- 请注意,该消息消失了。
- 请注意,服务中没有其他任何事情发生。
- 再发一条消息
- 请注意,消息留在队列中
每次服务启动时,都会从队列中删除一条消息,因此,我的服务似乎实际上正在读取该消息,但是一旦读取该消息,它就无法确定将其发送到何处或如何处理它。