Как использовать веб-службу WCF через URL-адрес во время выполнения?

Я хочу получить доступ ко всем методам, выставленным в службе через URL. если предположить, что URL-адрес будет:

http://localhost/MyService/MyService.svc

Как получить доступ к методам:

  • если у меня есть ServiceReference
  • и что мне делать, если у меня нет справочной службы.

Ответы

Ответ 1

Чтобы использовать службу WCF, вам необходимо создать прокси-сервер WCF.

В Visual Studio вы щелкните правой кнопкой мыши проект и выберите "Добавить ссылку на службу" из контекстного меню. Введите URL-адрес, к которому вы хотите подключиться, и если эта служба запущена, вы должны получить прокси файл клиента, созданный для вас.

Этот файл обычно будет содержать класс под названием MyService Клиент. Вы можете создать экземпляр этого класса, и вы должны увидеть все доступные методы в этом классе клиента в вашем распоряжении.

Если вы не хотите добавлять ссылку на службу в Visual Studio, вы можете добиться того же результата, выполнив инструмент командной строки svcutil.exe - это также сгенерирует для вас все необходимые файлы для вашего прокси-класса клиента.

Марк

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

BasicHttpBinding binding = new BasicHttpBinding();
EndpointAddress address = new EndpointAddress("http://localhost:8888/MyService");

MyServiceClient serviceClient = new MyServiceClient(binding, address);

Но даже в этом случае вам нужно сначала импортировать и создать прокси-клиент, используя инструменты "Добавить служебную ссылку" или svcutil.exe.

Ответ 2

Ответьте, как это сделать, не имея ссылки на службу. Посмотрите здесь (опция #a):

Написание первого клиента WCF

Вам все еще нужна ссылка (а именно ссылка на сборку, содержащую контракт/интерфейс), но вы не делаете ссылку на службу.

EDIT: Хотя это возможно, я бы не рекомендовал его. Производительность не совсем велика, когда вам приходится создавать прокси-серверы, подобные этому. Обычно я использую svcutil.exe и создаю сборку, содержащую моих клиентов, и создаю ссылку на эту сборку. Таким образом, у вас есть больше возможностей для управления прокси-серверами.

Ответ 3

Вы также можете использовать класс WebClient для вызова службы WCF без необходимости прокси-сервера службы. Эффективно вы можете отправлять и получать строки и двоичные данные, а также имитировать POST.

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

Ответ 4

Вы можете просто предоставить wsdl вашего сервиса: http://localhost/MyService/MyService.svc?wsdl.

Из wsdl вы можете создавать прокси-классы и использовать их на клиенте.