【发布时间】:2016-07-18 13:47:04
【问题描述】:
我正在尝试让 WSDLImporter 使用本地 WSDL 文件并遇到一些问题。远程文件没有问题,因为我像这样使用 MetaDataExchangeClient:
private MetadataSet GetRemoteMetaData(string wsdlUrl)
{
var address = new Uri(wsdlUrl);
var mexMode = MetadataExchangeClientMode.HttpGet;
var metadataExchangeClient = new MetadataExchangeClient(address, mexMode);
metadataExchangeClient.ResolveMetadataReferences = true;
ServicePointManager.ServerCertificateValidationCallback =
((sender, certificate, chain, sslPolicyErrors) => true);
ICredentials networkCredential = new NetworkCredential("username", "password", "domain");
metadataExchangeClient.HttpCredentials = networkCredential;
return metadataExchangeClient.GetMetadata();
}
但是对于本地文件,我尝试像这样使用 XmlReader:
private MetadataSet GetLocalMetaData(string wsdlPath)
{
return MetadataSet.ReadFrom(XmlReader.Create(wsdlPath));
}
并得到这个异常:
<definitions xmlns='http://schemas.xmlsoap.org/wsdl/'> was not expected.
所以它似乎无法处理命名空间/前缀。我知道 XmlReader 也可以使用 XmlReaderSettings 类,所以我玩了一下,但找不到任何有用的东西。
任何帮助将不胜感激。
【问题讨论】:
-
wsdlPath返回的 XML 是什么样的?它正在考虑一个wsx:Metadata元素,下面有各种wsx:MetadataSection元素,我认为不应该有任何definitions元素。 -
哦,我明白了,那么我的想法就在这里了。我想我必须先找到一种方法来转换 WSDL XML,然后再将其读取到 MetadataSet。 wsdlPath 是一个普通soap wsdl xml 文件的路径。