Создать конфигурации конечной точки WCF в клиентском приложении, в коде? - PullRequest
15 голосов
/ 24 февраля 2011

Я пытаюсь использовать веб-сервис WCF из клиентского приложения .NET и думаю, что мне нужно иметь возможность программно создавать конечные точки, но я не знаю как.Я думаю, что мне нужно сделать это, потому что, когда я пытаюсь запустить приложение, я получаю следующую ошибку:

Не удалось найти элемент конечной точки по умолчанию, который ссылается на контракт 'IEmailService' в конфигурации клиента ServiceModelраздел.Это может быть связано с тем, что для вашего приложения не найден файл конфигурации или в элементе клиента не найден элемент конечной точки, соответствующий этому контракту.

При устранении этой ошибки я создал простое приложение для форм Windows., в котором я пытаюсь использовать тот же веб-сервис.С помощью этого тестового приложения я могу успешно подключиться к веб-службе и получить действительный ответ.Но я могу воспроизвести точную ошибку, указанную выше, в моем тестовом приложении, удалив узел system.serviceModel и все его дочерние узлы из файла app.config приложения (возможно, мне не придется удалять ВСЕ этого раздела,Точно сказать не могу).Итак, моей первой мыслью было, что мне нужно добавить этот раздел в файл app.config для реального приложения, и все должно быть в порядке.К сожалению, по нелепым причинам, в которые я не буду вдаваться, это не вариант.Итак, мне осталось сгенерировать эту информацию в коде внутри клиентского приложения.

Я надеюсь, что кто-то здесь может помочь мне разобраться с этим или может указать мне хороший ресурс для решения этой проблемы,

Можно ли создавать конфигурации конечных точек в клиентском приложении в коде?

Ответы [ 2 ]

40 голосов
/ 24 февраля 2011

По умолчанию, когда вы выполняете операцию Add Service Reference, среда выполнения WCF сгенерирует для вас прокси на стороне клиента.

Самый простой способ его использования - создать экземпляр прокси-клиента с помощью конструктора, который не принимает параметров, и просто получить информацию из app.config:

YourServiceClient proxy = new YourServiceClient();

Для этого в файле конфигурации должна быть запись <client> с вашим контрактом на обслуживание - в противном случае вы получите сообщение об ошибке.

Но прокси-класс на стороне клиента, сгенерированный средой выполнения WCF, также имеет дополнительные конструкторы - например, адрес конечной точки и привязка, например:

BasicHttpBinding binding = new BasicHttpBinding(SecurityMode.None);
EndpointAddress epa = new EndpointAddress("http://localhost:8282/basic");

YourServiceClient proxy = new YourServiceClient(binding, epa);

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

9 голосов
/ 24 февраля 2011

Восточный способ использования службы WCF, если у вас есть ссылка на сборку, которая определяет интерфейс, использует класс System.ServiceModel.ChannelFactory.

Например, если вы хотите использовать BasicHttpBinding:

var emailService = ChannelFactory<IEmailService>.CreateChannel(new BasicHttpBinding(), new EndpointAddress(new Uri("http://some-uri-here.com/));

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

...