Я боролся с 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, но каждый раз, когда вы пытаетесь использовать его в совместимой со стандартами кроссплатформенной среде, все идет к черту.