【问题标题】:Read a local WSDL file with XmlReader使用 XmlReader 读取本地 WSDL 文件
【发布时间】: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 文件的路径。

标签: c# xml wsdl


【解决方案1】:
public MetadataSet GetRemoteMetadata(string wsdlFilePath)
{
    var xmlDoc = XDocument.Load(wsdlFilePath);
    var reader = xmlDoc.CreateReader();
    var serviceDescription = System.Web.Services.Description.ServiceDescription.Read(reader);
    var metadataDocuments = new MetadataSection[] {
        MetadataSection.CreateFromServiceDescription(serviceDescription)
    };
    return new MetadataSet(metadataDocuments);
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-09-08
    • 1970-01-01
    • 1970-01-01
    • 2016-12-05
    • 1970-01-01
    • 2021-09-10
    • 1970-01-01
    相关资源
    最近更新 更多