2014-12-12 3 views
1

У меня есть один автономный (сторонний) WSDL-файл с 10 операциями. (server is not .net) Все операции имеют собственные пространства имен XML, определенные для операций, сообщений и всех базовых типов.Создать прокси из WSDL

Некоторые из базовых типов в разных операциях имеют одинаковые имена и иногда одинаковый контент или одну и ту же структуру (не всегда), но они фактически различны, поскольку они определены в разных пространствах имен xml/xsd (поэтому они уникальны).

Когда я импортирую этот WSDL в мой проект клиента C#, я могу дать ему одно уникальное пространство имен в VS-объекте VS и он генерирует прокси-сервер. Проблема заключается в том, что разные операции имеют одинаковые (xml-тип) имена для базовых типов, тогда они генерируют имена классов C#, такие как MyType1, MyType2 ...

Кроме того, сторонний сервер может обновить службу и так далее WSDL обновляется, и базовые типы генерируются снова в .net-классы, такие как MyType1, MyType2 ... но на этот раз, возможно, ранее сгенерированный MyType6 генерируется как MyType7, и это нарушает клиентский/потребительский код.

Какое решение существует для решения этой проблемы?

Мы думаем, чтобы настроить wscfblue код, но он, кажется, громоздкая работа и требует технического обслуживания ..

Environment: 
-VS2013 Ultimate (Client) 
-.net 4.5 (Client) 
-Unknown technology (Server) -> generates WSDL and provides the endpoint. 

ответ

0

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

Пример: use svcutil to map multiple namespaces for generating wcf service proxies

+0

Спасибо, но это не работает для меня. Как уже упоминалось в ответе, «у меня в настоящее время возникают проблемы, когда типы, созданные из файлов .xsd, не затрагиваются этими пространствами имен» - он не создал отдельные пространства имен и все типы создаются, как MyType1, MyType2. – hB0

+0

Глядя на комментарии к [этот ответ] (http://stackoverflow.com/questions/6849580/svcutil-from-wsdl-file-error-schema-with-target-namespace-could-not-be-found) кажется, вам повезло, если вы не используете * .xsd, но явно указываете все файлы xsd в командной строке. Если после этого у вас все еще возникают проблемы, вы можете столкнуться с необходимостью использовать специальное решение. – moarboilerplate

+0

У меня есть все эти методы и комбинации командных строк, и это не работает вообще. svcutil не подходит для нескольких пространств имен, когда у вас есть один контракт на обслуживание, а контракты данных поступают из разных XSD-файлов с уникальными пространствами имен xml (и ухудшаются, если типы в разных пространствах имен xml имеют одинаковые имена). – hB0

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