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