gpt4 book ai didi

wcf - 启用已存在的 MSMQ 队列的 WCF 读取

转载 作者:行者123 更新时间:2023-12-04 22:35:46 26 4
gpt4 key购买 nike

我使用 .Net Framework 4.0 开发了 WCF 自托管服务。

[ServiceContract(SessionMode=SessionMode.Required)]
[ServiceKnownType(typeof(XmlDocument))]
public interface IMyMSMQ
{
[OperationContract(IsOneWay=true, Action="*")]
void OnMessageReceived(MsmqMessage<XmlDocument> msg);
}

此接口(interface)的我的类实现如下所示。

public class MyMSMQ : IMyMSMQ, IErrorHandler 
{
public void OnMessageReceived(MsmqMessage<XmlDocument> msg)
{
// Log Message To appropriate destination
Logger.LogMessage(msg);
}
}

我尝试了多种方案。

场景 1:

  1. 启动服务。
  2. 启动客户端应用。
  3. 使用客户端应用程序将消息发送到队列
  4. 请注意,队列似乎没有填充消息,因为服务已经读取了消息。
  5. 请注意服务中没有发生任何其他事情。
  6. 再发一条消息
  7. 注意消息留在队列中

场景 #2:这与场景 1 类似,但启动应用程序的顺序不同

  1. 启动客户端应用。
  2. 使用客户端应用程序将消息发送到队列
  3. 请注意,队列似乎确实填充了消息,因为服务尚未启动且尚未读取消息。
  4. 启动服务。
  5. 请注意消息消失了。
  6. 请注意服务中没有发生任何其他事情。
  7. 再发一条消息
  8. 注意消息留在队列中

每次服务启动时,都会从队列中删除一条消息,因此,看起来我的服务实际上正在读取该消息,但无法弄清楚将其发送到哪里或读取后如何处理它消息。

最佳答案

我发现 WCF 库中的代码不是问题所在。这就是我定义端点绑定(bind)的方式。

            MsmqIntegrationBinding binding = new MsmqIntegrationBinding(MsmqIntegrationSecurityMode.None);
binding.ReceiveTimeout = new TimeSpan(0, 1, 0); // set timeout to 1 minute.
binding.ReceiveErrorHandling = ReceiveErrorHandling.Fault;

this.AddServiceEndpoint(typeof(eRxMsmqWCF.IeRxMSMQ), binding, GetMQUri());

它需要有 MsmqIntegrationBinding(这需要您包含以下 using 语句:using System.ServiceModel.MsmqIntegration;

有时我太依赖智能感知了。 MsmqIntegrationBinding 不在其他绑定(bind)所在的标准 System.ServiceModel 下。所以我改用了 NetMsmqBinding

关于wcf - 启用已存在的 MSMQ 队列的 WCF 读取,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13087078/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com