Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server MSMQ远程接收错误“;指定的格式名称不支持请求的操作";_Sql Server_Msmq_Windows Server 2012 R2_Transactional Queue - Fatal编程技术网

Sql server MSMQ远程接收错误“;指定的格式名称不支持请求的操作";

Sql server MSMQ远程接收错误“;指定的格式名称不支持请求的操作";,sql-server,msmq,windows-server-2012-r2,transactional-queue,Sql Server,Msmq,Windows Server 2012 R2,Transactional Queue,所以遇到了这个奇怪的问题。我正在尝试从未经身份验证的事务性msmq接收消息。我的环境是: 队列为Windows Server 2012 R2的服务器。这也是数据库服务器(SQL server) 安装客户端应用程序的服务器也是Windows Server 2012 R2 我正在尝试将消息从SQL Server发送到MSMQ(工作正常)。但是当客户端应用程序尝试使用下面的代码接收消息时,它抛出了我在标题中提到的错误 private void OnPeekCompleted(object send

所以遇到了这个奇怪的问题。我正在尝试从未经身份验证的事务性msmq接收消息。我的环境是:

  • 队列为Windows Server 2012 R2的服务器。这也是数据库服务器(SQL server)
  • 安装客户端应用程序的服务器也是Windows Server 2012 R2
我正在尝试将消息从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
我无法从DB服务器访问客户机服务器,因此我需要将消息队列放在同一个DB服务器上,因为我正在从SQL向队列发送消息

我已检查了以下各项:

  • 从SQL发送消息没有问题
  • 服务器之间不存在n/w可访问性问题
  • 在消息队列服务器安全属性中启用未授权的RPC调用
  • 队列格式正确。我使用的是直接操作系统格式。还尝试使用TCP格式指定IP地址而不是机器名
  • 但是没有用。有什么想法吗


    谢谢

    如果此功能以前工作过并已停止工作,则您的问题几乎肯定是由于发送方或接收方的DTC更改、防火墙更改或两者都更改所致

    根据需要,您可能需要:

    …将队列计算机和客户端计算机配置为启用 网络故障诊断码访问

    …配置Windows防火墙以将MS DTC添加到异常列表中


    如果这从未奏效,那么这可能是其他几个问题之一,但如上所述,远程读取“不是最佳消息传递模型的一部分”,即MSMQ采用的最佳范例是发送远程、读取本地。考虑改变你的体系结构,不要使用远程读取。< /P>什么是队列地址?这项工作之前和停止工作吗?谢谢汤姆。我听到你关于远程阅读的说法,并理解它不是推荐的型号。我们试图通过创建一个SQL调度作业并让它执行一个向消息队列发送消息的SP来减轻应用程序的一些沉重负载。问题是应用服务器无法从DB服务器访问,因此队列必须驻留在DB服务器上,我希望可以从应用服务器进行远程读取。我将按照您的建议尝试检查DTC设置和防火墙设置。谢谢