C# 使用XmlReader读取本地WSDL文件

C# 使用XmlReader读取本地WSDL文件,c#,xml,wsdl,C#,Xml,Wsdl,我试图让WSDLImporter使用本地WSDL文件,但遇到了一些问题。远程文件没有问题,因为我使用MetaDataExchangeClient,如下所示: private MetadataSet GetRemoteMetaData(string wsdlUrl) { var address = new Uri(wsdlUrl); var mexMode = MetadataExchangeClientMode.HttpGet; v

我试图让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();
    }
    private MetadataSet GetLocalMetaData(string wsdlPath)
    {
        return MetadataSet.ReadFrom(XmlReader.Create(wsdlPath));
    } 
但对于本地文件,我尝试使用如下XmlReader:

    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();
    }
    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
元素,我认为不应该有任何
定义
元素。哦,我明白了,那么我在这里的想法就大错特错了。我想我必须先找到一种方法来转换WSDL XML,然后再将其读入元数据集。wsdlPath是指向一个普通soap wsdl xml文件的路径。在
wsdlPath
返回的xml是什么样子的?这是一个
wsx:Metadata
元素,下面有各种
wsx:MetadataSection
元素,我认为不应该有任何
定义
元素。哦,我明白了,那么我在这里的想法就大错特错了。我想我必须先找到一种方法来转换WSDL XML,然后再将其读入元数据集。wsdlPath是指向一个普通soap wsdl xml文件的路径。
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);
}