Альтернатива SvcUtil.exe? - PullRequest
       9

Альтернатива SvcUtil.exe?

16 голосов
/ 12 января 2010

Я боролся с SvcUtil весь день, пытаясь заставить его сгенерировать полезный код для некоторых IMS Enterprise Services (в первую очередь, для службы группового управления, но есть и другие, с которыми нам также нужно работать). Вы можете найти IMS Сервис WSDL здесь http://www.imsglobal.org/es/index.html.

Я пришел к выводу, что SvcUtil - бесполезная запоздалая мысль от Microsoft, которая не поддерживает стандарты WSDL и XSD даже наполовину. Он не способен создать службу WCF, которая соответствует стандартным контрактам WSDL, в которых IMS одновременно использует функции AND. Несмотря на создание скомпилируемого кода из следующего WSDL (http://www.imsglobal.org/services/gms/wsdl/imsGroupManServiceSync_v1p0.wsdl), наблюдение за сгенерированным WSDL из службы WCF (? Wsdl,? Wsdl = wsdl0,? Xsd = xsd0 и т. Д.) Показывает, что ни одна из операций не существует, и только часть типов, которые были сгенерированы в коде, фактически распознаются WCF. Если мы портим сгенерированный код, мы можем получить что-то вроде функций (мы используем SoapUI для тестирования), но тогда это больше не соответствует контракту Так что это бесполезно для людей, которым действительно нужно звонить в эти службы.

Есть ли альтернативы SvcUtil? (Пожалуйста, не предлагайте встроенный в Visual Studio инструмент «Добавить ссылку на службу», который так же бесполезен, поскольку использует тот же код, что и SvcUtil.) Нам нужно что-то, что даст нам степень контроль над тем, как код генерируется из контракта WSDL, в каких файлах заканчивается каждая часть, в каких пространствах имен заканчивается каждый элемент кода и т. д. Контракт IMS импортирует оба типа XSD, характерные для сервисов, определенных в WSDL, а также XSD типы, которые являются общими для всех служб IMS. Нам нужно иметь возможность генерировать разные сборки для этих типов и ссылаться на них в сгенерированном коде (подобно тому, как SvcUtil, по-видимому, должен это делать ... но, похоже, он не делает то, что говорит, что его документация говорит, что это делает на всех.)

Я был большим поклонником WCF до сих пор. Очевидно, что это работает, когда вы используете только сервисы .NET / WCF, но каждый раз, когда вы пытаетесь использовать его в совместимой со стандартами кроссплатформенной среде, все идет к черту.

Ответы [ 2 ]

10 голосов
/ 12 января 2010

Вы смотрели на Генератор прокси WCF на Codeplex? Исходя из того, кто за этим стоит (Кейт Грегори и Мишель Леру Бустаманте), есть надежда, что это может быть полезно - плюс вы получаете источники, так что вы можете адаптировать / подправить по своему вкусу!

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

Кроме того, почитайте это сообщение в блоге Педрама Резаи , показывающее, как повлиять на шаг «Добавление справочника по службам» в Visual Studio с помощью собственного кода.

8 голосов
/ 09 декабря 2010

Извините, что у меня нет полного времени, чтобы ответить на это, но есть ответ на ваш вопрос. Существует интерфейс, который вы можете реализовать под названием IWsdlImportExtension, который имеет два метода, которые вас заинтересуют. Это:

GenerateContract () и GenerateOperation ()

Если вы реализуете эти методы, вы можете фактически контролировать, как SvcUtil откачивает код, добавляя или удаляя CustomAttributes и так далее. Вам нужно скомпилировать dll с интерфейсом в нем, а затем указать конфигурацию SvcUtil на DLL и интерфейсе.

Используя этот метод, вы можете, например, добавить документацию Xml в ваши прокси и т. Д. Вокруг этого есть несколько интересных статей.

...