MSMQ消息ID(作为变体)

时间:2014-03-25 18:19:32

标签: c# msmq

我有一个MSMQ触发器,可以打开一个独立的可执行文件。规则操作将消息ID(作为变体)作为调用参数传递。然后我使用消息id通过Queue.ReceiveById()接收消息。

一切都很好,但有一点点。消息ID的发送方式如下:

{5EADA58F-C733-48C3-A52A-A9FA749E7ADF}\2063

但是Queue.ReceiveById()函数要求消息ID看起来像这样(没有括号)

5EADA58F-C733-48C3-A52A-A9FA749E7ADF\2063

有人可以向我解释一下花括号是什么意思吗?是否有正确的方法来转换它(除了删除括号)?

编辑:我应该明确指出Message ID是作为字符串传递的,因为它是作为命令行参数传递给EXE的

2 个答案:

答案 0 :(得分:2)

ID是一个Guid加上一个额外的标识符:

  

标识符由20个字节组成,包括两个项目:发送计算机的机器Guid和计算机上消息的唯一标识符。的组合   这两个项目生成一个在网络上唯一的消息标识符。

所以我没有内置的解析/重新格式化功能。

如果你想解析"要重新格式化字符串的guid部分,可以执行以下操作:

string id = @"{5EADA58F-C733-48C3-A52A-A9FA749E7ADF}\2063";
string[] parts = id.Split('\\');
Guid g = Guid.Parse(parts[0]);
string newID = String.Join("\\",g.ToString("D").ToUpper(),parts[1]);

你可能会发现更多"优雅",但只是删除一些花括号似乎很重。

答案 1 :(得分:1)

转换为字符串并用空字符串替换括号。

这是一个代码示例

    var x = "{5EADA58F-C733-48C3-A52A-A9FA749E7ADF}\2063";
    string result = x.ToString().Replace("{",string.Empty).Replace("}",string.Empty);