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”

express-graphql 解析器参数在解析器中为空,但 info variableValues 填充了名称和值

了解下WSDL 端口

wsimport在解析WSDL时遇到问题

解析复杂的WSDL参数信息