у меня есть службы WCF, где клиентские приложения могут подключаться через MSMQ:MSMQ принимает сообщения только от некоторых клиентов
[ServiceContract(Namespace="http://example.com", SessionMode = SessionMode.NotAllowed)]
public interface IMyService
{
[OperationContract(IsOneWay = true)]
void Update(DataSet ds);
}
, а затем:
string queueName = ConfigurationManager.AppSettings["QueueName"];
NetMsmqBinding binding = new NetMsmqBinding("MyBinding");
if (!MessageQueue.Exists(@".\private$\" + queueName))
{
MessageQueue.Create(@".\private$\" + queueName, binding.ExactlyOnce);
}
ServiceHost msmqHost = new ServiceHost(typeof(MyService));
msmqHost.AddServiceEndpoint(typeof(IMyService), binding, "net.msmq://localhost/private/" + queueName);
со следующей конфигурацией:
<system.serviceModel>
<bindings>
<netMsmqBinding>
<binding name="MyBinding" durable="false" exactlyOnce="false" maxReceivedMessageSize="20000000">
<security mode="None" />
<readerQuotas maxDepth="32" maxStringContentLength="543192" maxArrayLength="2147483647" maxBytesPerRead="4096" maxNameTableCharCount="8456384" />
</binding>
</netMsmqBinding>
</bindings>
<services>
<service name="MyService" behaviorConfiguration="MsMqBehavior" />
</services>
<behaviors>
<serviceBehaviors>
<behavior name="MsMqBehavior">
<serviceThrottling maxConcurrentCalls="50" maxConcurrentSessions="50" maxConcurrentInstances="50" />
</behavior>
</serviceBehaviors>
</behaviors>
</system.serviceModel>
У меня есть служба с той же конфигурацией, которая уже используется без проблем на других установках. Но теперь на новой установке я получаю только сообщения от некоторых клиентов (9 на самом деле - есть 31). Сообщения, которые я получаю, всегда с одних и тех же серверов. Я не могу найти сообщение об ошибке в любом месте (журнал событий Windows (клиент/сервер), файл трассировки WCF), а также состояние MSMQ говорит «подключено» на клиентских компьютерах, которые не отправляют сообщения. Очереди мертвой буквы также пусты.
Сообщения должны быть потеряны где-то между клиентом MSMQ и сервером (я остановил свое приложение и в очереди сервера я получил только сообщения от девяти клиентов - такое же поведение, если я включил ведение журнала).
Любая помощь будет оценена
Update
Я использовал счетчики производительности для мониторинга очереди. Счетчик сеансов показывает правильное значение 31 сеанса. Также счетчик входящих сообщений показывает правильные значения. Однако, если я остановлю приложение или включу ведение журнала, только часть сообщений будет сохранена в очереди.
Вы нашли ссылку на статью KB, которая относится к MSMQ 1.0/Windows NT 4.0. Я знаю, что нельзя предполагать, но это действительно среда, в которой вы работаете? –
Нет, это единственная информация, которую я нашел. ОС - это датацентр Windows Server 2008 R2 – Jeldrik
Я просто посмотрел на один из моих старых примеров Wcf/Msmq. Единственное, что выскакивает для меня, это «void Update (DataSet ds);». Вы уверены, что ds находятся под максимальным размером? DataSets печально известны для раздувания. Можете ли вы написать метод temp для принятия строки (и, возможно, каждый клиент может отправить уникальное значение) и выписать файл temp/txt или что-то еще. как тест? – granadaCoder