我试图在连接到MSMQ队列的C#应用程序中实现加密,但我很难找到适用于我正在使用的特定配置的任何合适的文档。
该实现使用异步BeginPeek
,PeekCompleted
事件触发Receive
。
队列连接使用格式FormatName:Direct=OS:ServerName\private$\QueueName
,并且关闭加密后,实现工作完全正常。
对队列设置为body的加密,我根本无法写入队列,虽然我已将MessageQueueTransaction
包围的消息包裹在try...catch
块中,但我做了没有得到任何错误信息(即使它显然不起作用)。
private void Queue_PeekCompleted(object sender, PeekCompletedEventArgs e) {
String messageId = e.Message.Id;
Message m = null;
using (MessageQueueTransaction transaction = new MessageQueueTransaction()) {
try {
transaction.Begin();
m = _qc.Queue.Receive( transaction);
transaction.Commit();
} catch (MessageQueueException ex) {
if (ex.MessageQueueErrorCode == MessageQueueErrorCode.TransactionUsage) {
throw new IncompatibleQueueException("The queue is not transactional", ex);
}
transaction.Abort();
throw new QueueReadException("Unable to read from the queue. The read transaction has been aborted, and the message has not been taken.", ex);
}
}
}
我的目标是建立一个可以直接连接到队列的库,以便通过它发送的消息在传输时加密,加密存储在队列中,然后仍然加密。
虽然我可以对邮件内容实施加密,但我更愿意使用MSMQ中提供的加密,如果它可以干净地实现的话。 据我了解,这需要使用密钥对,但我找不到关键如何分发或使用的简明解释,或者即使这个假设是正确的。
如果任何人都可以提供消息发送的解释,当队列设置为body
级别加密时,它将会特别有用(即使基本的解释会让我继续),或者如果有人可以建议如何从上面的代码片段中获取堆栈跟踪或错误消息,这至少可以让我进一步调试它。
我在过去的两天里尝试过找到一个合适的示例或说明如何在C#中启用MSMQ加密,但我发现的所有示例都基于WCF或Azure,并以更复杂的方法为中心比我想要实施的。
如果可能的话,我宁愿避免使用WCF,但如果能够提供合适的解决方案,我会考虑任何替代方法。
非常感谢