Ссылка на службы WCF без мекс-привязки - PullRequest
4 голосов
/ 15 января 2012

Мне было интересно, как клиентский проект в Visual Studio может ссылаться на службу WCF, у которой нет привязки mex.Всякий раз, когда я удаляю привязку mex по умолчанию в каком-либо примере службы WCF, клиентские приложения не могут найти службу, а в автоматически сгенерированных комментариях рекомендуется удалить в производственной среде привязку mex.Тогда как клиентские приложения должны находить сервис и ссылаться на него?

Ответы [ 2 ]

10 голосов
/ 15 января 2012

Если у вас есть доступ к сборкам, которые содержат типы, которые определяют контракт на обслуживание, операции и контракты на данные, то вы можете просто создать прокси на лету, используя ChannelFactory.В этом случае вам не нужно извлекать какие-либо метаданные службы, поскольку у вас уже есть доступ ко всей информации, необходимой для вызова службы.

Например,

// Create service proxy on the fly
var factory = new ChannelFactory<IMyServiceContract>("NameOfMyClientEndpointInConfigFile");
var proxy = factory.CreateChannel();

// Create data contract
var requestDataContract = new MyDataContract();

// Call service operation.
var responseDataContract = proxy.MyServiceOperation(requestDataContract);

Это также помогает, если выиметь доступ к файлу конфигурации на стороне службы, чтобы вы могли скопировать информацию о конечной точке оттуда в свою конфигурацию клиента.

0 голосов
/ 15 января 2012

Конечная точка mex является необходимой частью сервисов WCF SOAP.Это то, что позволяет клиентским инструментам снимать WSDL и автоматически генерировать прокси-классы.Как вы указали, без этого клиенты не смогут получить информацию для использования сервиса.Если вы хотите, чтобы клиенты могли потреблять и находить ваш сервис, вы должны оставить его доступным, когда ваш сервис находится в производстве.

...