Разница между веб-ссылкой и ссылкой на сервис?

132

В чем разница между веб-ссылкой и ссылкой на службу в WCF? Что предпочтительнее в WCF?

Джон Сондерс
источник
Также взгляните на фабрики каналов - stackoverflow.com/questions/1698275/…
Маниш Джайн
1
хм, а может выбрать ответ? кстати хороший вопрос
Daniël Tulp

Ответы:

102

Низкоуровневый ответ здесь заключается в том, что веб-ссылка создаст клиентский прокси-класс, который позволяет вашему коду взаимодействовать с веб-службой, описанной через WSDL, и взаимодействует через SOAP или HTTP GET (другие плакаты указывают, что это только ASMX, но Веб-ссылки также могут взаимодействовать с веб-службами на основе Java или на основе Python или Ruby, если все они используют WSDL и соответствуют стандарту взаимодействия WS-I).

Ссылка на службу создаст клиентский прокси-класс, который взаимодействует со службой на основе WCF: независимо от того, является ли эта служба WCF веб-службой или нет.

Кевин Хоффман
источник
1
+1 за добавление, что любой стандартный веб-сервис с правильно отформатированным WSDL соответствует критериям
sidney.andrews
Итак, могу ли я добавить ссылку на веб-службу на основе Java? Будет ли это иметь смысл? поскольку Java ничего не знает о стеке ФОС ...
user20358
да, вы можете добавить ссылку на веб-службу java и т. д., если у нее есть файл wsdl. В этом случае ссылка на службу будет рассматривать ее как "классическую" веб-ссылку.
Брэди Мориц,
+1 за утверждение, что веб-служба может использовать описанные WSDL веб-службы, а также ASMX. На самом деле у меня есть бизнес-уровень, на котором есть веб-ссылка и ссылка на службу. Веб-ссылка использует веб-службу WSDL, а ссылка на службу использует службу ASMX.
Jagd
67

Веб-ссылка позволяет вам связываться с любой службой на основе любой технологии, которая реализует WS-I Basic Profile 1.1, и предоставляет соответствующие метаданные как WSDL. Внутри он использует стек связи ASMX на стороне клиента.

Ссылка на службу позволяет вам связываться с любой службой на основе любой технологии, которая реализует любой из множества протоколов, поддерживаемых WCF (включая, помимо прочего, базовый профиль WS-I). Внутри он использует стек связи WCF на стороне клиента.

Обратите внимание, что оба эти определения довольно широки и оба включают службы, написанные не на .NET.

Вполне возможно (хотя и не рекомендуется) добавить веб-ссылку, указывающую на службу WCF, если конечная точка WCF использует basicHttpBindingили какой-либо совместимый настраиваемый вариант.

Также можно добавить ссылку на службу, которая указывает на службу ASMX. При написании нового кода всегда следует использовать ссылку на службу просто потому, что она более гибкая и ориентирована на будущее.

Кристиан Хейтер
источник
1
Может ли кто-нибудь помочь мне начать работу с сервисом через Service Reference? С помощью веб-ссылки я всегда могу найти основные функции в каком-то сервисном объекте. Со ссылкой на сервис не так много. В качестве примера я пытаюсь использовать службу ставок FedEx, чтобы узнать цены на различные варианты доставки FedEx. Я знаю, что где-то там есть вызов getRates (), но я не могу найти его со ссылкой на службу.
Бен Миллс,
@BenMills: ищите класс с Clientсуффиксом.
Christian Hayter
17

Ссылка на службу - это новый интерфейс для добавления ссылок на все виды служб WCF (они могут не быть веб-службами), тогда как веб-ссылка конкретно касается веб-ссылок ASMX.

Вы можете получить доступ к веб-ссылкам с помощью дополнительных параметров в добавлении ссылки на службу (если я правильно помню).

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

DavidWhitney
источник
8
Добавить ссылку на службу -> Дополнительно -> Добавить веб-ссылку ... ничего похожего на неинтуитивные решения.
Jagd
7

Ссылки на службы имеют дело с конечными точками и привязками, которые полностью настраиваются. Они позволяют вам указывать клиентский прокси-сервер на WCF через любой транспортный протокол (HTTP, TCP, общая память и т. Д.).

Они предназначены для работы с WCF.

Если вы используете WebProxy, вы в значительной степени привязываете себя к использованию WCF через HTTP.

Брайан Дженисио
источник
5

Еще один момент, который следует принять во внимание, заключается в том, что новый пользовательский интерфейс для интерфейса службы даст вам гораздо больше гибкости в том, как вы хотите создать свой прокси-класс. Например, это позволит вам сопоставлять контракты данных с существующими dll, если они совпадают (на самом деле это поведение по умолчанию).

Вагнер Сильвейра
источник