portType 在 wsdl 解析中为空
Posted
技术标签:
【中文标题】portType 在 wsdl 解析中为空【英文标题】:portType is coming null in wsdl parsing 【发布时间】:2016-09-05 20:13:12 【问题描述】:我在中间实现WSDL解析器的小程序。但我得到 ptobject 即将为 NULL。程序中提到的 wsdl 正在发生这种情况。我不认为 WSDL 是错误的,因为如果将相同的 WSDL 提供给 SOAP UI,它会成功解析。
您能否帮助了解问题的根本原因?
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml;
using System.Xml.Schema;
using System.Xml.Serialization;
using System.Web.Services;
using System.Web.Services.Protocols;
using System.Net;
using System.Reflection;
using System.Web.Services.Description;
namespace ConsoleApplication14
class XmlSchemaReadWriteExample
static void Main()
XmlTextReader myReader = new XmlTextReader("https://domainws.ficora.fi/fiDomain/DomainNameWS_FicoraDomainNameWS.svc?wsdl");
if (ServiceDescription.CanRead(myReader))
ServiceDescription myDescription = ServiceDescription.Read(myReader);
Dictionary<string, Service> Services;
foreach (Service srv in myDescription.Services)
Services = new Dictionary<string, Service>();
Services.Add(srv.Name, srv);
foreach (Port p in srv.Ports)
Binding b = myDescription.Bindings[p.Binding.Name];
foreach (Object e in b.Extensions)
if (e is Soap12Binding || e is SoapBinding)
PortType ptobject = myDescription.PortTypes[b.Type.Name];
提前致谢。
比姆。
【问题讨论】:
在该行添加一个断点。 myDescription.PortTypes 中有什么? 【参考方案1】:试试这个
static void Main()
XmlTextReader myReader = new XmlTextReader("https://domainws.ficora.fi/fiDomain/DomainNameWS_FicoraDomainNameWS.svc?wsdl");
if (ServiceDescription.CanRead(myReader))
ServiceDescription myDescription = ServiceDescription.Read(myReader);
Dictionary<string, Service> Services;
foreach (Service srv in myDescription.Services)
Services = new Dictionary<string, Service>();
Services.Add(srv.Name, srv);
foreach (Port p in srv.Ports)
Binding b = myDescription.Bindings[p.Binding.Name];
foreach (Object e in b.Extensions)
if (e is Soap12Binding || e is SoapBinding)
//only change right here:
Port ptobject = srv.Ports[b.Type.Name];
我认为您可能在想要 Port 时正在查看 portType? 似乎没有为您指向的服务定义 portTypes。
编辑…………
好吧,再摆弄一下。加载了肥皂用户界面,是的,它在那里......我想我可能已经找到了你要找的东西...... 试试打https://domainws.ficora.fi/fiDomain/DomainNameWS_FicoraDomainNameWS.svc?wsdl=wsdl0
static void Main()
XmlTextReader myReader = new XmlTextReader("https://domainws.ficora.fi/fiDomain/DomainNameWS_FicoraDomainNameWS.svc?wsdl=wsdl0");
if (ServiceDescription.CanRead(myReader))
ServiceDescription myDescription = ServiceDescription.Read(myReader);
foreach (PortType pt in myDescription.PortTypes)
Console.WriteLine(pt.Name);
我在soap ui 的选项卡名称pat 中注意到了这一点……它正在拉出一个额外的wsdl“wsdl0”文件。这是一个进口 来自原始 Wsdl:
<wsdl:import namespace="http://domainws.ficora.fi.operations" location="https://domainws.ficora.fi/fiDomain/DomainNameWS_FicoraDomainNameWS.svc?wsdl=wsdl0"/>
您可以通过程序访问 URL ...
myDescription.Imports[0]
【讨论】:
我正在寻找 PORTTYPES 而不是端口。我认为 wsdl 很好,因为它正在 SOAP ui 中进行解析以上是关于portType 在 wsdl 解析中为空的主要内容,如果未能解决你的问题,请参考以下文章
WSDL 中的 <binding> 和 <portType> 有啥区别?
此 WCF 错误是啥意思:“自定义工具警告:无法导入 wsdl:portType”