[英]How to encrypt msmq messages?
對於我的實習,我正在制作一個使用MSMQ發送消息的應用程序。 除加密外,目前一切正常。 (私人數據)
應用程序將自定義對象的列表發送到服務器,並從服務器檢索它。 但是當我使用:message.UseEncryption = true; unittest不會運行。
我的代碼:
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Messaging;
using System.Text;
using System.Threading.Tasks;
namespace MSMQClient
{
public class ClientManager
{
public bool connected { get; private set; }
public string queueLocation { get; private set; }
public Message message { get; private set; }
public MessageQueue messageQueue { get; private set; }
public List<DataContracts.MemoryTransaction> notSentTransactions { get; private set; }
public ClientManager()
{
queueLocation = @".\private$\testqueue";
if (MessageQueue.Exists(queueLocation))
{
MessageQueue.Delete(queueLocation);
}
messageQueue = MessageQueue.Create(queueLocation);
//messageQueue.EncryptionRequired = EncryptionRequired.Body;
}
public bool isConnected()
{
if (messageQueue != null)
{
return true;
}
return false;
}
public bool sendToServer(List<DataContracts.MemoryTransaction> memoryTransactions)
{
try
{
message = new Message();
message.Formatter = new XmlMessageFormatter(new Type[] { typeof(List<DataContracts.MemoryTransaction>) });
//message.UseEncryption = true;
message.Body = memoryTransactions;
message.Label = "MemoryTransList";
message.Priority = MessagePriority.Normal;
messageQueue.Send(message);
return true;
}
catch (Exception ex)
{
Cocosoft.SDK.Logging.TextLogging(ex.ToString());
notSentTransactions = memoryTransactions;
return false;
}
}
}
我找到了這個網站,並嘗試了很多,但我無法讓它工作......我想我必須使用下面的東西:
public bool sendToServer(List<DataContracts.MemoryTransaction> memoryTransactions)
{
try
{
message = new Message();
message.Body = ... //memoryTransactions
message.Label = ... //"MemoryTransList"
message.Priority = ... //Priority.Normal
message.Formatter = ... //new XmlMessageFormatter(new Type[] { typeof(List<DataContracts.MemoryTransaction>) });
message.UseEncryption = ... //true
message.ConnectorType = ... //???
message.EncryptionAlgorithm = ... //EncryptionAlgorithm.Rc2
message.DestinationSymmetricKey = ...//???
messageQueue.Send(message);
return true;
}
catch (Exception ex)
{
notSentTransactions = memoryTransactions;
return false;
}
}
誰能幫我? 我錯過了什么嗎?
但Cocosoft SDK將其保存在logging.txt中:
轉換:指定的格式名稱不支持請求的操作。 例如,無法刪除直接隊列格式名稱。
System.Messaging.MessageQueueException (0x80004005): De opgegeven indelingsnaam ondersteunt de gevraagde bewerking niet. Een directe wachtrij-indelingsnaam kan bijvoorbeeld niet worden verwijderd.
bij System.Messaging.MessageQueue.SendInternal(Object obj, MessageQueueTransaction internalTransaction, MessageQueueTransactionType transactionType)
bij System.Messaging.MessageQueue.Send(Object obj)
bij MSMQClient.ClientManager.sendToServer(List`1 memoryTransactions) in d:\StageGeert\UnitTestStage\MSMQClient\ClientManager.cs:regel 96
我找到了解決方案! 我使用的是本地版本的MSMQ。 但是我必須在Azure中實現,所以我使用了Azure Service Bus。 這與本地消息排隊有點不同。 但是由於Azure Service Bus,問題解決了! 好工作微軟!
如果你設置了message.UseEncryption = true; 目標隊列的隱私級別必須是“正文”或“可選”。 如果目標隊列的隱私級別為“無” - 它將拒絕加密的消息。 https://msdn.microsoft.com/ru-ru/library/ms700286(v=vs.85).aspx
計算機管理控制台中有一個用於MSMQ的復選框,用於設置郵件存儲限制。 加密可能是強制消息超出此存儲限制。 您是否可以嘗試取消選中存儲限制復選框,以查看是否允許您正確發送郵件?
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.