2010-07-06 9 views
3

Как начать работу с клиентом WCF при использовании услуги доступен только на net.msmq
- при использовании «Добавить ссылку на службу» вы получите сообщение об ошибке. ..Как добавить ссылку на службу WCF при использовании net.msmq

Экземпляр MetadataExchangeClient не может быть инициализирован, поскольку для схемы «net.msmq» не существует привязки. Вы можете указать привязку в конструкторе или указать имя_настройки. Имя параметра: схема Если служба определена в текущем решении, попробуйте создать решение и снова добавить ссылку на службу.

К примеру, у меня есть пример BizTalk WcfNetAdapterPublishing из MSDN и работает, и она включает в себя тест консольного клиента, который использует службу на ...

net.msmq://localhost/private/WcfNetMsmqAdapterPublishing 

так что кажется, что это возможно, но я не могу все равно начать?

ответ

2

Вы можете заключить одни и те же контракты на услуги и данные, скажем, basicHttpBinding на отдельной конечной точке, создать ссылку на службу с помощью этой конечной точки (и обмен метаданными для нее), а затем вручную адаптировать ваш app.config вместо netMsmqBinding.

Или вы можете просто поделиться сборкой контрактов с контрактами на обслуживание и данные между сервером и проектом клиента и создать конфигурацию вручную (на самом деле не очень важно) и создать свой клиентский прокси в коде, используя ChannelFactory<T>. Поскольку вы уже используете netMsmqBinding, вы определенно используете .NET на обоих концах провода - так что техника должна работать нормально.

+0

Спасибо за указатель Марк – SteveC

1

Вам необходимо добавить базовый адрес (в дополнение к net.msmq, который у вас есть) с префиксом http. Так, с net.msmq в примере вы дали, вы бы добавить следующее:

http://localhost/private/WcfNetMsmqAdapterPublishing ... 

Затем нужно добавить конечную точку для mex так:

<endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" /> 

Затем начните обслуживание (за пределами Visual Studio) ... а затем добавить ссылку на которую вы добавили http:// конечной ...

Вот пример одного из моих:

<service name="Services.Archiver" behaviorConfiguration="FacebookArchiver"> 
     <endpoint address="" 
       binding="netMsmqBinding" 
       bindingConfiguration="msmq" 
       contract="Services.IArchiver" 
       behaviorConfiguration="validator" /> 
     <endpoint address="mex" 
       binding="mexHttpBinding" 
       contract="IMetadataExchange" /> 
     <host> 
     <baseAddresses> 
      <add baseAddress="net.msmq://localhost/private/Archiver" /> 
      <add baseAddress="http://localhost/private/Archiver" /> 
     </baseAddresses> 
     </host> 
    </service> 

В этом примере вы просто добавили служебную ссылку на http://localhost/private/Archiver ... done.

+0

Спасибо за ответ – SteveC