WCF MSMQ, размещенный в IIS7, не получал сообщения автоматически до тех пор, пока я вручную не включил службу
Я видел несколько сообщений, связанных с этим, но я не нашел ответа на мою проблему
Итак, у меня есть клиент, отправляющий сообщения в MSMQ с помощью привязки WCF netmsmq. Это отлично работает.
У меня есть веб-сайт, размещенный в моем локальном IIS7 (Windows 7), который предоставляет конечную точку WCF MSMQ.
Когда я публикую сообщение от клиента, сообщения не используются, они просто остаются в очереди до тех пор, пока я не просматриваю службу вручную, после чего сообщения отправляются службе, размещенной в IIS.
Итак, что мне нужно сделать, чтобы сообщения автоматически отправлялись моей службой WCF, размещенной в IIS?
Примечание. Я только что заметил, что после вызова любой службы WCF, размещенной в моем веб-приложении в IIS, происходит активация службы или чего-то еще, и внезапно сообщения очереди потребляются...
Конфигурация клиента
<system.serviceModel>
<client>
<endpoint name="Service.ServiceContracts.QueueLoggingService NET MSMQ"
address="net.msmq://localhost/private/Service.WebHost/QueueLoggingService.svc"
binding="netMsmqBinding"
contract="Service.ServiceContracts.IQueueLoggingService">
</endpoint>
</client>
<bindings>
<netMsmqBinding>
<binding exactlyOnce="true" durable="true" maxRetryCycles="15" receiveRetryCount="15">
<security mode="None">
<message clientCredentialType="None" />
<transport msmqAuthenticationMode="None" />
</security>
</binding>
</netMsmqBinding>
</bindings>
</system.serviceModel>
Конфигурация сервера
<system.serviceModel>
<serviceHostingEnvironment aspNetCompatibilityEnabled="true" multipleSiteBindingsEnabled="true">
</serviceHostingEnvironment>
<services>
<service name="Service.ServiceImplementations.QueueLoggingService">
<endpoint
address="net.msmq://localhost/private/Service.WebHost/QueueLoggingService.svc"
binding="netMsmqBinding"
contract="Service.ServiceContracts.IQueueLoggingService">
</endpoint>
<endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange"/>
</service>
</services>
<bindings>
<netMsmqBinding>
<binding exactlyOnce="true" durable="true" maxRetryCycles="15" receiveRetryCount="15">
<security mode="None">
<message clientCredentialType="None" />
<transport msmqAuthenticationMode="None" />
</security>
</binding>
</netMsmqBinding>
</bindings>
</system.serviceModel>
Вещи, которые я пробовал:
- Служба очереди сообщений работает
- Запущена служба триггеров очереди сообщений
- Запущена служба адаптера прослушивателя Net.Msmq
- Запущена служба адаптера прослушивателя Net.Pipe
- Запущена служба адаптера прослушивателя Net.Tcp
- Служба службы общего доступа к портам Net.Tcp работает
- Служба координатора распределенных транзакций работает
- MSMQ Active Directory Интеграция доменных служб установлена
- Поддержка MSMQ HTTP установлена
- Триггеры MSMQ установлены
- Установлена поддержка многоадресной рассылки MSMQ
- Активация WCF без HTTP установлена
- Активация WCF HTTP установлена
- AppPool настроен на автоматический запуск
Мой веб-сайт по умолчанию содержит следующую конфигурацию:
<application path="/Service.WebHost" applicationPool="MyGenericAppPool" enabledProtocols="net.msmq, http"> <virtualDirectory path="/" physicalPath="C:\Some Path\Service.WebHost" /> </application> <bindings> <binding protocol="http" bindingInformation="*:80:" /> <binding protocol="net.tcp" bindingInformation="808:*" /> <binding protocol="net.pipe" bindingInformation="*" /> <binding protocol="net.msmq" bindingInformation="localhost" /> <binding protocol="msmq.formatname" bindingInformation="localhost" /> </bindings>
2 ответа
Функция автозапуска обеспечивается AppFabric, поэтому вы должны установить его. Затем вы сможете использовать командную строку, аналогичную этой, для автоматического запуска вашего WAS-приложения:
appcmd.exe set app /app.name:YourApplication / serviceAutoStartEnabled: True / serviceAutoStartMode: все
Хорошо
Этот парень сэкономил мне много часов:
Пол Бахлер @paulbahler
Оказывается, что даже когда AppPool был установлен на автоматический запуск.... это было не по назначению...
Итак, этот парень предложил мне установить инструменты App Fabric, а затем просто настроить приложение для автоматического запуска и работать с ним.