Общие типы WCF в WSDL - PullRequest
       1

Общие типы WCF в WSDL

4 голосов
/ 09 января 2012

Я должен использовать несколько отдельных веб-сервисов от одного и того же провайдера. В основном каждая функция имеет свой собственный сервис (wsdl). Для взаимодействия каждый wsdl имеет ссылки для общих типов (например: xs: import namespace = "http://generic.type.com" />).

Добавление ссылок на службы в VS будет префиксом пространства имен службы для этих типов. Добавление двух сервисов создаст два отдельных, но идентичных класса:

var context = new Service1.GenericContext();

var contex2 = new Service2.GenericContext();

Как я могу отобразить / наложить их вместе? У меня 20+ таких сервисов.

Попробовал NamespaceMappings в Reference.svcmap, но не удалось. Я не знаю, что использовать TargetNamespace и ClrNamespace.

ть!

1 Ответ

2 голосов
/ 09 января 2012

Вместо добавления ссылок на службы вы должны использовать svcutil.exe для генерации одного файла прокси службы для конечных точек вместе.

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

.

Тогда вызов svcutil.exe имеет много параметров. Поэтому я рекомендую вам сохранить его в командном файле или даже более удобно: поместите вызов команды в разделе «События сборки» в Visual Studio в «Командную строку события перед сборкой».

Вот вызов svcutil для моего клиента, который объединяет все прокси-классы в ServiceProxy.cs. Скорее всего, вам нужно изменить путь к svcutil.exe и, конечно, сервисные URL:

"%PROGRAMFILES%\Microsoft SDKs\Windows\v7.0A\bin\svcutil.exe" /noLogo /noConfig /out:"$(ProjectDir)ServiceProxy.cs" /t:code /i /l:cs /tcv:Version35 /ser:DataContractSerializer /ct:System.Collections.Generic.List`1 /n:*,Oe.Corporate.CRMFacade.Service.Test http://localhost:3615/Client010/MasterDataService.svc http://localhost:3615/Client010/BusinessPartnerService.svc http://localhost:3615/Client010/MarketingAttrService.svc http://localhost:3615/Client010/ProductTransactionService.svc http://localhost:3615/Client010/ProductDataService.svc http://localhost:3615/Client010/ActivityManagementService.svc http://localhost:3615/Client010/PromotionService.svc

UPDATE: Я забыл упомянуть, что событие перед сборкой завершится неудачей, если вы не добавите его в конец вашего файла .csproj прямо над закрывающим элементом Project:

<Target Name="PreBuildEvent" Condition="'$(PreBuildEvent)'!=''" DependsOnTargets="$(PreBuildEventDependsOn)">
    <Exec WorkingDirectory="$(OutDir)" Command="$(PreBuildEvent)" ContinueOnError="true" />
</Target>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...