В моей нынешней системе у меня есть служба маршрутизатора и более дюжины (около половины используют msmq, остальные используют tcp) службы WCF, размещенные через IIS.Мне было поручено переместить все службы, кроме маршрутизатора, в службу Windows.Это было выполнено с использованием тех же конфигураций, которые присутствовали при использовании файла IIS web.config.Вот фрагмент предыдущих конфигураций (общая очередь для службы: myservices / wcfservice):
<!--Router Service web.config-->
<client>
<endpoint address="net.msmq://localhost/MyServices/WCFService.svc" binding="netMsmqBinding" contract="*" name="IWCFService_Msmq" />
</client>
<!--Services web.config-->
<service behaviorConfiguration="SomeServiceBehavior" name="WCFService">
<endpoint binding="netMsmqBinding" name="IWCFService_Msmq"
contract="IWCFService" />
<host>
<baseAddresses>
<add baseAddress="net.msmq://localhost/MyServices/WCFService" />
</baseAddresses>
</host>
</service>
Я не понимаю, почему это работает, поскольку служба имеет привязку net.tcp и маршрутизаторимеет msmq, и когда я спросил, мне сказали, что это «магия».Я попытался сделать то же самое с моей установкой (маршрутизатор к службе Windows), используя аналогичную конфигурацию, но получил сообщение об ошибке:
<!--Router Service web.config-->
<client>
<endpoint address="net.msmq://localhost/MyServices/WCFService" binding="netMsmqBinding" contract="*" name="IWCFService_Msmq" />
</client>
<!--One "other" Services hosted in Windows Service app.config-->
<service behaviorConfiguration="SomeServiceBehavior" name="WCFService">
<endpoint binding="netMsmqBinding" name="IWCFService_Msmq"
contract="IWCFService" />
<host>
<baseAddresses>
<add baseAddress="net.tcp://localhost/MyServices/WCFService" />
</baseAddresses>
</host>
</service>
Это работало нормально со всеми моими службами, которые только используют tcp, ноКогда я пытаюсь сделать это с msmq и пытаюсь запустить службу Windows, я получаю следующую ошибку в окне просмотра событий:
Service cannot be started. System.InvalidOperationException: Could not find a base address that matches scheme net.msmq for the endpoint with binding NetMsmqBinding. Registered base address schemes are [net.tcp].
Я новичок в msmq, поэтому любая помощь с благодарностью.Спасибо!
Обновлено:
Я обновил базовый адрес в сервисе app.config, чтобы он соответствовал адресу, указанному в маршрутизаторе web.config.Я пробовал это ранее, и это не сработало.Позже я узнал, что это потому, что я не сделал сам msmq «Транзакционной очередью» (которая была необходима для нашей установки).Как только это было сделано, все получилось!
<!--One "other" Services hosted in Windows Service app.config-->
<service behaviorConfiguration="SomeServiceBehavior" name="WCFService">
<endpoint binding="netMsmqBinding" name="IWCFService_Msmq"
contract="IWCFService" />
<host>
<baseAddresses>
<add baseAddress="net.msmq://localhost/MyServices/WCFService" />
</baseAddresses>
</host>
</service>