C# 使用XmlReader读取本地WSDL文件
我试图让WSDLImporter使用本地WSDL文件,但遇到了一些问题。远程文件没有问题,因为我使用MetaDataExchangeClient,如下所示: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
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);
}