因此遇到了这个奇怪的问题。我试图从未经过身份验证的事务性msmq接收消息。我的环境是:
我正在尝试将消息从SQL Server发送到MSMQ(工作正常)。但是,当客户端应用程序尝试使用下面的代码接收消息时,会抛出我在标题中提到的错误。
private void OnPeekCompleted(object sender, PeekCompletedEventArgs args)
{
MessageQueue mq = (MessageQueue)sender;
if (mq != null)
{
try
{
if (Log.IsInfoEnabled)
{
Log.InfoFormat("[{0}] Starting processing message queue {1}", _endpoint.RouteName, _queue.QueueName);
}
mq.EndPeek(args.AsyncResult);
MessageQueueTransaction transaction = new MessageQueueTransaction();
transaction.Begin();
Message message = mq.Receive(transaction);
... // omitted for simplicity
我无法从数据库服务器访问客户端服务器,因此我需要在同一个数据库服务器上安装消息队列,因为我将消息从SQL发送到队列
我检查过以下内容:
但无济于事。有什么想法吗?
由于
答案 0 :(得分:0)
如果之前有效并且停止工作,那么问题几乎肯定是由于发送方或接收方的DTC发生变化,防火墙发生变化,或两者兼而有之。
根据this guidance,您可能需要:
...配置队列计算机和客户端计算机以启用 网络DTC访问。
和
...配置Windows防火墙以将MS DTC添加到例外列表中。
如果这从未奏效,那么它可能是其他几个问题之一,但正如所述here,远程读取“不是最佳消息传递模型的一部分”,即MSMQ采用的最佳范例是< em> send-remote,read-local 。考虑更改您的架构而不是使用远程读取。