Проблема пространства имен с контрактом данных WCF / проблема дизайна? - PullRequest
1 голос
/ 09 ноября 2010

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

Например: класс myCommonClass используется в 2 моих службах service1 и service2

Для этого на уровне обслуживания у меня есть библиотека MyApplication.Common, и эта библиотека содержит myCommonClass. Поскольку обе мои службы имеют ссылку на MyApplication.Common, они оба могут использовать ее.

В моем клиентском приложении есть служебные ссылки на service1 и service2. Для моего клиентского приложения service1.myCommonClass является отдельным пространством имен по сравнению с service2.myCommonClass и в этом моя проблема

В моем Reference.cs (созданном с помощью svcutil - пространство имен ОБА классов равно то же , т. Е.

System.Runtime.Serialization.DataContractAttribute
(Name="MyCommonClass", Namespace="http://A.B.MyCommonClassNamespace")])

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

Следовательно, для моего клиентского приложения они выглядят как два совершенно не связанных класса.

* Вопрос 1 *: Можно ли как-то указать моему клиентскому приложению, что service1.myCommonClass и service2.myCommonClass по своей сути являются одним и тем же классом?

* Вопрос 2 *: Что-то не так с моим дизайном, чтобы я мог запустить в эту проблему?

1 Ответ

1 голос
/ 09 ноября 2010

Нет, ваш дизайн в порядке.Вместо добавления ссылки на службу из Visual Studio создайте прокси-класс, используя svcutil в командной строке.Создайте проект библиотеки классов и добавьте в него сгенерированные файлы .cs.Вы также можете создать пакетный файл и запустить его на этапе предварительной сборки.
Используйте svcutil, как показано ниже, для генерации прокси-класса в одном файле из dll службы (dll, реализующей две ваши службы)

svcutil.exe /t:metadata "PATH\service1.dll" "PATH\service2.dll"  
svcutil.exe /t:code *.wsdl *.xsd /o:Proxy.cs
...