2012-01-09 3 views
4

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

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

var context = new Service1.GenericContext(); 

var contex2 = new Service2.GenericContext(); 

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

Пробное пространство именМарты в Reference.svcmap, но с ошибкой. Я не знаю, что использовать TargetNamespace и ClrNamespace.

ty!

ответ

2

Вместо добавления ссылок на службы вы должны использовать 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 прямо над закрытием Элемент проекта:

<Target Name="PreBuildEvent" Condition="'$(PreBuildEvent)'!=''" DependsOnTargets="$(PreBuildEventDependsOn)"> 
    <Exec WorkingDirectory="$(OutDir)" Command="$(PreBuildEvent)" ContinueOnError="true" /> 
</Target> 
+0

ty! Я получил эту ошибку: «Основное соединение было закрыто: не удалось установить доверительные отношения для безопасного канала SSL/TLS». Услуги находятся на https. Я не могу найти способ принудительно принять сертификат. – LZW

+0

Пожалуйста, направляйте свою машину, чтобы доверять удаленному сертификату, импортировав его в свой местный магазин. Это можно сделать через оснастку MMC или более удобно, просто просмотрев IE с веб-службой и сообщите IE, чтобы он постоянно доверял сертификату. Это импортирует его в ваш локальный магазин сертификатов. Но вы должны использовать IE, поскольку Firefox имеет собственный магазин сертификации. – mono68

+0

Tried IE и MMC, сертификат указан в mmc в доверенных корневых центрах сертификации, которые все еще не работают. В C# я могу обойти сертификат с помощью ICertificatePolicy. – LZW

Смежные вопросы