C# 通过msmqIntegrationBinding向msmq队列发送消息
所以我试图配置我的客户端代码,以便将消息发送到MSMQ队列。我遵循了此处描述的步骤:我的客户端代码如下所示:C# 通过msmqIntegrationBinding向msmq队列发送消息,c#,wcf,msmq,msmqintegrationbinding,C#,Wcf,Msmq,Msmqintegrationbinding,所以我试图配置我的客户端代码,以便将消息发送到MSMQ队列。我遵循了此处描述的步骤:我的客户端代码如下所示: class Program { static void Main(string[] args) { var binding = new MsmqIntegrationBinding("MyMessagesBinding"); var address = new EndpointAddress(@"msmq.formatname:DIRECT
class Program
{
static void Main(string[] args)
{
var binding = new MsmqIntegrationBinding("MyMessagesBinding");
var address = new EndpointAddress(@"msmq.formatname:DIRECT = OS:.\private$\MyMessages");
var channelFactory = new ChannelFactory<IDataRelayService>(binding, address);
var channel = channelFactory.CreateChannel();
while (true)
{
var message = new MyMessage
{
Content = "this is content!!!",
Id = "random uuid"
};
var msmqWrapper = new MsmqMessage<MyMessage>(message)
{
Priority = MessagePriority.Highest
};
channel.PassMessage(msmqWrapper);
Console.WriteLine("message sent");
Console.ReadLine();
}
}
}
它编译和运行没有问题,但当我打开evet viewer时,MSMQ没有记录任何事件。如果我打开计算机管理工具查看队列,它会在我的队列中显示0条消息。我做错了什么
编辑:
我为MSMQ启用了事件跟踪,下面是事件查看器显示的内容:
您的问题几乎肯定与权限有关 运行邮件发件人的服务帐户在其尝试发送到的队列上必须具有以下MSMQ权限:
- 发送消息
- 获取属性
- 获取权限
如果队列两端都有WCF,则应使用netMsmqBinding而不是msmqIntegrationBinding 您的问题几乎肯定与权限有关 运行邮件发件人的服务帐户在其尝试发送到的队列上必须具有以下MSMQ权限:
- 发送消息
- 获取属性
- 获取权限
如果队列两端都有WCF,则应使用netMsmqBinding而不是msmqIntegrationBinding 这听起来像是邮件被存储在发送方机器上。检查客户端计算机上的MSMQ服务,并查找临时出站队列。你的留言应该在上面,我怎么能看到?我正在查看计算机管理/消息队列,发现队列中没有任何消息。您是否正在谈论其他工具?您是否正在查看传出队列?传出队列为空:(而且您确实在接收方计算机上启用了MSMQ事件日志?听起来消息好像存储在发送方计算机上。请检查客户端计算机上的MSMQ服务,并查找临时出站队列。您的消息应该在该队列上。我怎么能看到?我正在查看计算机管理/消息队列,但没有看到我。)消息被保存在我的队列中。您是否正在谈论其他工具?您是否正在查看传出队列?传出队列为空:(而且您肯定在接收方计算机上启用了MSMQ事件日志?我的所有代码和MSMQ队列都在一台计算机上。我在提升权限下运行我的消息发送方。@SzwornyDziąch-检查队列权限。授予您运行的帐户对队列的完全控制权。好的,明天我回来工作时,如果它不存在,我会这样做。)rks-接受这个答案。我向每个用户授予了所有权限并打开了事件日志记录。但我仍然不知道发生了什么:)。请查看我更新的问题。@SzwornyDziąch您可以查看接收计算机上的死信队列或事务死信队列吗?您的邮件在吗?我的所有代码和msmq队列都在一台计算机上。我正在以提升的权限运行我的邮件发件人。@SzwornyDziąch-检查队列权限。授予您正在运行的帐户在对队列的完全控制下。好的,明天我回来工作时会这样做,如果可行的话-接受这个答案。我向每个用户授予了所有权限并打开了事件日志记录。但我仍然不知道发生了什么:)。请查看我更新的问题。@SzwornyDziąch您可以查看接收机器上的死信或事务死信队列吗?您的邮件在那里吗?
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.6.1" />
</startup>
<system.serviceModel>
<client>
<endpoint name="MyResponseEndpoint"
address="msmq.formatname:DIRECT=OS:.\private$\MyMessages"
binding="msmqIntegrationBinding"
bindingConfiguration="MyMessagesBinding"
contract="Client.IDataRelayService">
</endpoint>
</client>
<bindings>
<msmqIntegrationBinding>
<binding name="MyMessagesBinding">
<security mode="None" />
</binding>
</msmqIntegrationBinding>
</bindings>
</system.serviceModel>
</configuration>
[ServiceContract]
public interface IDataRelayService
{
[OperationContract(IsOneWay = true, Action = "*")]
void PassMessage(MsmqMessage<MyMessage> message);
}
public interface IDataRelayServiceChannel : IDataRelayService, System.ServiceModel.IClientChannel
{
}