Должен ли контракт на обслуживание (интерфейс) быть представлен клиенту? - PullRequest
0 голосов
/ 20 октября 2010

В процессе обучения WCF.

Например, у меня есть 3 сборки:

1.) Service.Contract: имеет определение интерфейса MyType IMyInterface ();

2.)Сервис: имеет реализацию интерфейса MyType MyService (): IMyInterface;

3.) Клиент: вызывает сервис.

Мой основной вопрос: должен ли проект 'Service.Contract' бытьподвергается воздействию проекта «Клиент», так как ему необходимо знать прототип интерфейса.Если да, разве это не противоречит принципам SOA?Если нет, то как нам добиться обращения в Сервис только с адресом конечной точки?

Ответы [ 2 ]

1 голос
/ 20 октября 2010

Да. Интерфейс должен быть выставлен клиенту. В противном случае клиент не знает, какие методы доступны в службе.

Существуют инструменты, которые можно использовать для генерации кода интерфейса для вас из метаданных вашей службы (при условии, что вы предоставляете данные службы), поэтому клиенту не нужен фактический файл интерфейса. По сути это то, что происходит, когда вы используете Visual Studio (или другой инструмент разработки) и используете «Добавить ссылку на службу».

В качестве альтернативы есть инструмент командной строки, поставляемый с dotNet - SvcUtil.exe:
http://msdn.microsoft.com/en-us/library/ms733133.aspx
http://en.csharp -online.net / WCF_Essentials% E2% 80% 94Generating_the_Proxy

Я не понимаю, как это нарушит принципы SOA. Как сказал мой предыдущий комментарий. Как клиент узнает, как позвонить в вашу службу, если он не знает, что такое реализованный контракт?

0 голосов
/ 20 октября 2010

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...