Добавление сервисных ссылок WCF на несколько проектов - PullRequest
5 голосов
/ 15 октября 2011

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

Я размещаю WCF локально на своем IIS и пытаюсь добавить сервисные ссылки на проекты.

Вопрос 1. При добавлении ссылок мне следует добавлять ссылку на службу для каждого проекта отдельно или есть ли способ, которым я могу совместно использовать одну и ту же ссылку на службу для всех проектов?

Причина, по которой я спрашиваю, состоит в том, что, если я добавляю отдельные ссылки, каждая ссылка получает свое собственное пространство имен, и когда мне приходится передавать один и тот же объект между проектами, я получаю InvalidCastException, поскольку каждый ServiceClient имеет свое пространство имен.

Пример - Site.Business.XDataService.XDataServiceClient (). GetItem () это не то же самое, что Site.Web.XDataService.XDataServiceClient (). GetItem ()

Вопрос 2. Я указал адрес локальной службы в классе, который реализует интерфейс службы, как показано ниже -

[ServiceBehavior (Namespace = "http://localhost:801/XDataService.svc", IncludeExceptionDetailInFaults = true)]

Это не кажется правильным. Если я перенесу свой код в другую / живую среду, мне, очевидно, придется снова изменить эту часть и перекомпилировать. Где я могу указать это (Web.Config?), Чтобы я мог изменить этот адрес без необходимости перестраивать свое приложение?

Ценю любое понимание. Спасибо!

Ответы [ 2 ]

6 голосов
/ 15 октября 2011

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

В основном, все ссылки на службы являютсякусок кода .NET - пространство имен, класс и т. д.

Еще лучше (!) для службы WCF, вы также получаете бесплатный интерфейс (более или менее тот же интерфейс, который вы определили для вашей службы)так что вы можете делать хорошие вещи с точки зрения внедрения инъекций зависимостей и т. д.

4 голосов
/ 15 октября 2011

Первый вопрос - сервис такой же, как и любой другой код. Например, код доступа к базе данных. Должны ли вы включить это в каждый проект, которому требуется доступ к вашей базе данных? Нет - вы должны поместить его в проект, на который могут ссылаться другие проекты.

Что касается вашего второго вопроса, вы указываете пространство имен, но я ожидаю, что вы думаете, вы указываете адрес конечной точки службы. Пространство имен похоже на пространство имен кода C # - оно, по сути, обеспечивает дополнительную идентификацию и ясность в случае, если у вас есть несколько объектов с одним и тем же именем. Обычно вы используете пространство имен, например http://mywebsite.com/MyService/VersionNumberIfRequired или подобное.

Сам адрес указан в конфигурации. Адрес будет меняться в зависимости от среды / места развертывания - пространство имен не должно.

...