标签: msmq

从ASP .Net Web服务访问MSMQ的权限错误

我编写了一个从消息队列中读取Web服务.这在Cassini下工作正常.

现在我已经在IIS下部署了服务,当服务尝试访问队列时,我收到一条错误消息:

队列不存在或您没有足够的权限来执行操作.

我已将IIS虚拟目录上的匿名访问用户设置为我自己的域帐户,该帐户是本地计算机上管理员组的成员.我已授予此相同用户对队列的完全权限,以及NETWORK SERVICE和ASPNET.

我仍然得到相同的错误消息.

我还尝试禁用虚拟目录上的匿名访问并使用我自己的登录详细信息连接到服务 - 无济于事.

任何有关此问题的帮助将不胜感激!


我也尝试了各种组合:

并且testUsr对队列具有完全权限.我在C:\上的MSMQ商店文件夹中添加了用户和ASPNET的权限

asp.net iis permissions web-services msmq

3
推荐指数
1
解决办法
4485
查看次数

限制MSMQ消息/确定消息的优先级

我不确定如何最好地描述这个或最好的标题,所以请耐心等待!

我正在使用MSMQ排队大量命令,这些命令将触发对各种网站和API的HTTP请求.为了避免锤击这些服务(并保持在某些预定义的请求限制内),我需要确保只有在从最后一个请求开始经过最小时间后才能执行命中同一域的任务.

以前我使用数据库对任务进行排队,因此可以执行查询来实现这一目标,但我们使用任务数量快速超过了该解决方案(表上的死锁方式太多).

有没有人对我们采取什么方法有任何建议?我已经考虑过将项目从队列中删除,直到找到一个可以执行的项目 - 但是我意识到没有什么可以阻止队列上的排序,这意味着我们可以在相同的域中取出数千个,然后再找到一个域.

谢谢!

.net c# msmq

3
推荐指数
1
解决办法
1674
查看次数

高负载服务器负载均衡,使用WCF和MSMQ

目前我正在开发一个空间数据处理服务器.以下是要求:

  1. 服务器必须能够每秒接收和处理大约150-200条小消息(gps修复,一些其他数据).
  2. 它必须是可扩展的.例如,在多台机器上运行并平衡负载本身(没有nlb)

目前我已经测试过这种架构:

  1. 传入消息服务,仅负责获取消息(不带msmqwcf绑定)
  2. 消息解析器服务.从msmq获取消息,解析它们并写入db,同时向下一个服务发送通知(再次使用普通的MSMQ互操作).这个可以在几台PC上工作
  3. 数据发布者服务.包含小缓存并负责从db获取请求的数据.通过wcf使用TCP绑定向客户端发送通知.

此外,所有服务都有配置方法和一些通过WCF TCP绑定调用的其他任务.

小的性能测试表明它的工作速度非常快,但我想知道这是将这些MSMQ和WCF一起用于这个特定应用程序的最佳方式.或者也许有人可以给我一个指导方向?

c# wcf msmq

3
推荐指数
1
解决办法
4638
查看次数

如果我的函数在处理时失败,System.MessageQueue(MSMQ)消息是否会丢失?

我使用以下代码发送消息:

var transaction = new MessageQueueTransaction())
transaction.Begin(  );

var message = new Message
{
   Body = myContent,
   Recoverable = true
};

m_oMessageQueue.Send( message , myTransaction );

transaction.Commit( );
Run Code Online (Sandbox Code Playgroud)

并使用a BeginRecieveReceiveCompleted事件处理程序接收它.

如果我的事件处理程序在调用之前失败EndRecieve,那么该消息是否应保留在队列中并且可用于后续的接收调用?我看到的行为是消息永远消失了.(或者可能会有超时,之后它会再次出现?)

更新接收消息的代码如下所示.

var messageQueue = new MessageQueue( myPath );
messageQueue.ReceiveCompleted += messageQueue_ReceiveCompleted_ThrowException;
messageQueue.BeginReceive();
Run Code Online (Sandbox Code Playgroud)

出于测试目的,我在messageQueue_ReceiveCompleted_ThrowException事件处理程序中抛出异常.

然后我用一个工作事件处理程序重复上面的代码,但我没有被调用.

c# msmq message-queue

3
推荐指数
1
解决办法
3705
查看次数

MSMQ查询特定消息

我有一个关于MSMQ的任务......我设计了一个像这样的异步架构:

CLient - > WCF服务(托管在WinService中) - > MSMQ

所以基本上WCF服务接收请求,处理它们,将它们添加到INPUT队列并返回GUID.相同的WCF服务(通过侦听器)从队列中获取第一条消息(执行某些操作......)然后将其放回另一个队列(OUTPUT).

问题是当客户端请求时,如何从OUTPUT队列中检索结果...因为MSMQ不允许随机访问它的消息,唯一的解决方案是遍历所有消息并将其推回,直到找到我需要的确切一个.我不想在这个OUTPUT队列中使用DB,因为客户端施加了一些限制......

msmq

3
推荐指数
2
解决办法
5552
查看次数

设置MSMQ以进行群集

有人能指出一些关于为队列聚类设置MSMQ的好资源吗?我有兴趣帮助:

  1. 实际上设置群集MSMQ节点,并使其功能
  2. 设置应用程序以将消息发送到群集队列.
  3. 设置应用程序(至少2个)以从同一个群集队列中读取.

msmq nservicebus cluster-computing

3
推荐指数
1
解决办法
2084
查看次数

Wix和MSMQ:MSMQ检测

如果安装了MSMQ,我必须创建一个消息队列.如果未安装MSMQ,则无需执行任何操作即可继续前进.

有没有办法,我们可以发现MSMQ是否安装在MSMQExtension dll中.

我知道,我们可以使用相同的注册表,但如果未安装MSMQ,安装程序将失败.

msmq wix wix-extension wix3.5

3
推荐指数
1
解决办法
1304
查看次数

在WCF(MSMQ)服务中禁用DTC

我正在使用MSMQ端点.我在我的服务上设置了以下属性.

[OperationBehavior(TransactionScopeRequired = true, TransactionAutoComplete = true)]
public void MyMethod(MyParam param) { ... }
Run Code Online (Sandbox Code Playgroud)

在我的界面上

[ServiceBehavior(ConcurrencyMode = ConcurrencyMode.Single, ReleaseServiceInstanceOnTransactionComplete = true)]
Run Code Online (Sandbox Code Playgroud)

我有一个方法,它更新sql server数据库,并始终使用MSDTC并提升事务.

我该如何压制这个.如何连接到MSMQ事务的完全SEPARATE事务中的sql server.我只想要一个sql事务,而不是DTC事务.有没有办法确保sql事务不包含在MSMQ事务的范围内.

我希望我能做到这一点,而不是在MSMQ上完全删除交易,这正是我正在考虑的问题.

问候

克雷格

wcf msmq transactions

3
推荐指数
1
解决办法
1617
查看次数

在WCF应用程序中设置MSMQ以确保可靠的邮件传递

所以我的任务是设置MSMQ,这样如果我们的邮件服务器出现故障(这似乎经常发生),消息就会在队列中结束,并在他们重新启动时发送.有了这个说我不得不说除了我在过去24小时里学到的东西之外我对此并不多了但是我相信我知道我采取了正确的方法,但我想问社区中的某个人,因为有一些混乱我的同事在我们的WCF应用程序中给出了一些现有的设置.

目前,我们有一些使用msmq作为端点协议的服务.端点看起来像这样

<endpoint address="net.msmq://localhost/private/Publisher"
behaviorConfiguration="BatchBehaviour" 
binding="netMsmqBinding"
bindingConfiguration="MSMQNoSecurity"
contract="HumanArc.Compass.Shared.Publisher.Interfaces.Service.IPublisherSubscriber"
name="PublishSubscriber"/>
Run Code Online (Sandbox Code Playgroud)

这当然允许客户端进行服务呼叫,如果由于某种原因服务未启动,它将确保当服务恢复时,将处理呼叫.我不认为它会做的是你在服务方法中有类似的东西.

try
{
    smtp.Send(mail);
    return true;
}
catch (System.Net.Mail.SmtpFailedRecipientException ex)
{
     throw new Exception("User Credentials for sending the Email are Invalid",ex);
}
catch (System.Net.Mail.SmtpException smtpEx)
{
   throw new Exception(string.Format("Application encountered a problem send a mail message to {0} ", smtpHostName),smtpEx);
}
Run Code Online (Sandbox Code Playgroud)

WCF不会重试并以某种方式再次发送消息,我对这个假设是否正确?

我认为我们应该拥有的内容类似于以下代替上面对smtp.send()的调用.(来自http://www.bowu.org/it/microsoft/net/email-asp-net-mvc-msmq-2.html)

  string queuePath = @".\private$\WebsiteEmails";
  MessageQueue msgQ;
  //if this queue doesn't exist we will create it
  if(!MessageQueue.Exists(queuePath))
       MessageQueue.Create(queuePath);
  msgQ = new MessageQueue(queuePath);
  msgQ.Formatter = new BinaryMessageFormatter();
  msgQ.Send(msg); …
Run Code Online (Sandbox Code Playgroud)

wcf msmq

3
推荐指数
1
解决办法
1425
查看次数

等待事件处理程序的异步

我很困惑如何最好地处理这种情况.我不想等待异步调用的响应.具体来说,我有:

public async Task<IApiData> FetchQueuedApiAsync(TimeSpan receiveTimeout)
{
    var message = await Task.Factory.FromAsync<Message>(
        ReadQueue.BeginReceive(receiveTimeout), ReadQueue.EndReceive);
    return message.Body as IApiData;
 }
Run Code Online (Sandbox Code Playgroud)

这按预期工作.但是,如果超时到期,则不得调用ReadQueue.EndReceive,否则将引发异常.显然,FromAsync并不知道这一点并盲目地调用它 - 解雇异常.不要在超时时调用EndReceive的要求由MSMQ实现,超出了我的控制范围.

当消息准备就绪或发生超时时,队列会公开事件.这是您通常检查消息是否存在的地方,然后根据文档调用EndReceive.标准听众......

ReadQueue.ReceiveCompleted += ReadQueue_ReceiveCompleted;
Run Code Online (Sandbox Code Playgroud)

我的问题是,我不明白如何做到这一点,仍然有这样的等待(即我希望能够等待我现在,但通过委托处理它).那有意义吗?

c# asynchronous msmq

3
推荐指数
1
解决办法
4192
查看次数