2013-05-09 2 views
0

VS 2012/.NET4.5, Windows 8/IIS8 и 64 битWCF активации для MSMQ, где служба (.svc) находится в корневом каталоге

Использование приложения службы WCF, вся документация, которую я видел до сих пор указывая свою очередь MSMQ на соответствие имени службы, предполагаю, что я использую приложение или виртуальный каталог под сайтом IIS.

Это цитата из MSDN http://msdn.microsoft.com/en-us/library/ms789042.aspx

Приложение активизируются должно соответствовать (самый длинный матч) префиксом имени очереди.

Например, имя очереди: msmqWebHost/orderProcessing/service.svc. Если приложение 1 имеет виртуальный каталог /msmqWebHost/orderProcessing с сервисом service.svc под ним, а приложение 2 имеет виртуальный каталог/msmqWebHost с заказProcessing.svc под ним, приложение 1 активировано. Если Приложение 1 удалено, приложение 2 активировано.

Кроме того, http://blogs.msdn.com/b/tomholl/archive/2008/07/12/msmq-wcf-and-iis-getting-them-to-play-nice-part-1.aspx

Однако, когда вы хостинг для вашего MSMQ с поддержкой службы в IIS 7 WAS, имя очереди должно соответствовать URI из SVC-файла вашей службы. В этом примере мы будем размещать эту услугу в приложении под названием MsmqService с файлом .svc с именем MsmqService.svc, поэтому очередь должна называться MsmqService/MsmqService.svc. Очереди, используемые для WCF услуг всегда должна быть частной

И http://msdn.microsoft.com/en-us/magazine/cc163357.aspx

Важно отметить, что активация MSMQ конечных точек только работает корректно, если очередь имеет такое же имя, как .svc файл (минус название машины). Это означает, что если ваша конечная точка обслуживания равна /server/app/service.svc, то имя очереди должно быть app/service.svc.

MyService.svc файл непосредственно в корневом каталоге моего сайта IIS (который использует пул .NET 4 в интегрированном режиме), так что я сделал следующее:

  1. Создание частной транзакционной очереди так называемый MyService.svc и полный контроль сетевых сервисов (для тестирования).
  2. Настройка моего web.config конечной точки: адрес = «net.msmq: //localhost/private/MyService.svc»
  3. я был в состоянии выдвинуть сообщение в очередь с помощью приложения тестового клиента с помощью адреса в (2).
  4. Я добавил поддержку протокола MSMQ на сайте, выполнив следующие действия: C:\Windows\System32\inetsrv>appcmd set site "MyWebsite" /+bindings.[protocol='net.msmq',bindingInformation='localhost'] (и проверить, добавлена ​​поддержка должным образом)
  5. С моего сайта дополнительные настройки у меня есть http,net.tcp,net.msmq В Enabled Protocols
  6. я проверил, что «Net .Msmq Adener Adapter ", который отвечает за активацию службы при поступлении сообщения, и я перезапустил его.
  7. Мои web.config:
<configuration> 
    <appSettings> 
    <add key="aspnet:UseTaskFriendlySynchronizationContext" value="true" /> 
    </appSettings> 
    <system.web> 
    <compilation debug="true" targetFramework="4.5" /> 
    <httpRuntime targetFramework="4.5" /> 
    </system.web> 
    <system.serviceModel> 
    <behaviors> 
     <serviceBehaviors> 
     <behavior> 
      <serviceMetadata httpGetEnabled="true" httpsGetEnabled="true" /> 
      <serviceDebug includeExceptionDetailInFaults="true" /> 
     </behavior> 
     </serviceBehaviors> 
    </behaviors> 
    <protocolMapping> 
     <add binding="basicHttpBinding" scheme="http" /> 
     <add binding="netMsmqBinding" scheme="net.msmq" /> 
    </protocolMapping> 
    <serviceHostingEnvironment aspNetCompatibilityEnabled="false" 
     multipleSiteBindingsEnabled="true" /> 
    <bindings> 
     <netMsmqBinding> 
     <binding name="MsmqBinding_IMyService" exactlyOnce="true" 
      receiveErrorHandling="Move"> 
      <security mode="None"/> 
     </binding> 
     </netMsmqBinding> 
    </bindings> 
    <services> 
     <service name="CompanyName.Service.MyService"> 
     <endpoint name="MyService" 
      address="net.msmq://localhost/private/MyService.svc" 
      bindingConfiguration="MsmqBinding_IMyService" 
      binding="netMsmqBinding" contract="IMyService" > 
     </endpoint> 
     </service> 
    </services> 
    </system.serviceModel> 
    <system.webServer> 
    <modules runAllManagedModulesForAllRequests="true" /> 
    <directoryBrowse enabled="false" /> 
    </system.webServer> 
</configuration> 

Моя служба не получает активируется с появлением новых сообщений в очереди и сообщения остаются в очереди. Это потому, что я не использую приложение или виртуальный каталог, или что-то мне не хватает?

ответ

0

Проблема сортируется путем создания приложения на веб-сайте по умолчанию и изменения конфигурации в соответствии с новым путем.

Смежные вопросы