我在C#中开发了Windows服务
我的Windows Server 2012有2个私有队列:queueRequests和queueResponses。
我的队列不是交易。
我的客户端使用凭据MyDomain \ UserDeploy执行控制台应用程序。
服务器中的Windows服务使用凭据MyDomain \ UserAgent执行。
MyDomain \ UserAgent和MyDomain \ UserDeploy用户对队列具有完全控制权:queueRequests和queueResponses。
服务器和客户端位于同一个MyDomain中。
控制台应用程序客户端,用于从/向服务器中的专用队列发送消息和读取消息。
服务器中的Windows服务从/ toprivate队列发送消息和读取消息。
执行步骤:
控制台应用程序客户端将消息A发送到专用队列 服务器中的queuerequests
Windows服务从私有队列队列请求中读取消息A
Windows服务sendMessage B到私有队列队列响应
控制台应用程序客户端从专用队列读取消息B. queueresponses。
它正在完成所有步骤。
现在,我不知道原因,第4步失败了。 客户端无法从远程队列中读取消息。
我不明白为什么:客户端可以将消息发送到队列,但不能从队列中读取。
我收到 MessageQueueException 但是exception.Message为空。
有什么好的疑难解答建议吗?
片段代码:
const string ForSend = @"FormatName:DIRECT=OS:{0}\private$\DeploymentCommands";
const string ForRead = @"FormatName:DIRECT=OS:{0}\private$\DeploymentResponses";
private DeploymentResponse WaitForResponse()
{
try
{
Message rsp = colaStatus.ReceiveByCorrelationId(correlationId, new TimeSpan(0, timeOut, 0));
DeploymentResponse ret = rsp.Body as DeploymentResponse;
Console.WriteLine("Respuesta WaitForResponse:" + ret.DeploymentId + " - " + ret.Status);
Trace.WriteLine("Respuesta WaitForResponse:" + ret.DeploymentId + " - " + ret.Status);
return ret;
}
catch (MessageQueueException ex)
{
Console.WriteLine("Error WaitForResponse in remote server " + remoteServer + ". " + ex.Message);
Trace.WriteLine("Error WaitForResponse in remote server " + remoteServer + ". " + ex.Message);
return null;
}
catch (Exception)
{
throw;
}
}
有关 MessageQueueException 的详情。
我得到了
消息:null
MessageQueueErrorCode -2147023169
ErrorCode -2147467259
但没有在MessageQueueErrorCode Enumeration中找到该代码。
-2147023169值。在十六进制中: 800706BF
-2147467259值。在十六进制中: 80004005
关于这些代码的信息不多。只有我得到:
0x80004005 -2147467259 E_Fail
0x800706BF -2147023169 PRC_S_Call_Failed_DNE
完全跟踪例外:
消息: - MessageQueueErrorCode -2147023169 - ErrorCode-2147467259 堆栈跟踪:
在System.Messaging.MessageQueue.MQCacheableInfo.get_ReadHandle()at System.Messaging.MessageQueue.ReceiveBy(String id,TimeSpan timeout, Boolean remove,Boolean compareId,Boolean throwTimeout, MessageQueueTransaction事务,MessageQueueTransactionType transactionType)
at System.Messaging.MessageQueue.ReceiveByCorrelationId(String correlationId,TimeSpan超时)
在DeploymentAgent.Client.DeploymentInvoker.WaitForResponse()
答案 0 :(得分:0)
你可能尝试的事情:
AllowNonauthenticatedRPC
- details here 答案 1 :(得分:0)
您是否应该考虑使用 public
而不是private
个队列。阅读以下有关公共队列优势的文章: