Как добавить сервисную ссылку WCF при использовании net.msmq - PullRequest
3 голосов
/ 06 июля 2010

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

Не удалось инициализировать экземпляр MetadataExchangeClient, поскольку для схемы net.msmq нет привязки. Вы можете указать Binding в конструкторе или указать имя_конфигурации. Название параметра: схема Если служба определена в текущем решении, попробуйте создать решение и снова добавить ссылку на службу.

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

net.msmq://localhost/private/WcfNetMsmqAdapterPublishing

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

Ответы [ 2 ]

2 голосов
/ 06 июля 2010

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

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

1 голос
/ 04 мая 2012

Вам необходимо добавить базовый адрес (в дополнение к имеющемуся у вас 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.

...