Установка исходного WSDL с externalMetadataLocation не работает - PullRequest
2 голосов
/ 01 марта 2011

Я создаю веб-службу WCF внутри веб-приложения с C #, и, поскольку мне нужно включить проверку схемы для некоторых параметров XML, я хочу установить собственный wsdl для службы, в которой я использую <xs:include schemaLocation="<schemafilename>.xsd"/> внутри <wsdl:types> node.

Я узнал, что это место можно сделать

<serviceMetadata externalMetadataLocation="<wsdlfilename>.wsdl"/>

, но я не могу заставить его работать.Меня сбивает с толку то, что это не работает, даже если я позволю службе генерировать свой собственный wsdl (то есть не устанавливая атрибут), получаю доступ к сгенерированным метаданным через <serviceurl>/<servicename>.svc?wsdl, сохраняю их в файл и затем устанавливаю этот файл какexternalMetadataLocation (используя ..\<wsdlfilename>.wsdl).WcfTestClient дает мне следующее:

Warning: No code was generated.If you were trying to generate a client, this could be
because the metadata documents did not contain any valid contracts or servicesor
because all contracts/services were discovered to exist in /reference assemblies.
Verify that you passed all the metadata documents to the tool.Warning: If you would
like to generate data contracts from schemas make sure to use the /dataContractOnly
option.

Иногда это приводит к более сложным ошибкам, таким как

Error: Cannot import wsdl:port
Detail: Cannot find definition for http://tempuri.org/:BasicHttpBinding_IProcessi.  Service Description with namespace http://tempuri.org/ is missing.Parameter name: name
XPath to Error Source: //wsdl:definitions[@targetNamespace='http://www.archinet.it/HRSuite/Processi/']/wsdl:service[@name='Processi']/wsdl:port[@name='BasicHttpBinding_IProcessi']

Error: Cannot import wsdl:portType
Detail: An exception was thrown while running a WSDL import extension: System.ServiceModel.Description.DataContractSerializerMessageContractImporter

Error: Schema with target namespace 'http://www.archinet.it/HRSuite/Processi/' could not be found.
XPath to Error Source: //wsdl:definitions[@targetNamespace='http://www.archinet.it/HRSuite/Processi/']/wsdl:portType[@name='IProcessi']

На самом деле я еще не настолько опытен с пространствами имен xml, так что это может бытьчто-то с ними, но я пробовал как с, так и без пространств имен, так что я в растерянности

Спасибо

1 Ответ

2 голосов
/ 18 апреля 2012

У меня возникла та же проблема, и я понял, что это связано с тем, что WSDL WCF содержат ссылки на внешние XSD с помощью оператора Import.

Я решил проблему, реализовав один WSDL с использованием WcfExtras.Codeplex.com, а затем просмотрелисходный WSDL и скопировать его в мой статический файл WSDL.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...