2016-05-10 11 views
1

私はWSDLパーサーの中間実装の小さなプログラムです。しかし、私はptobjectがNULLになってきています。これは、プログラムで言及されているwsdlで起こっています。私はWSDLが間違っているとは思わない。なぜなら、同じWSDLをSOAP UIに渡すと、それは正常に解析されるからだ。wsdlの解析でportTypeがnullになっています

問題の根本原因を理解するのに手伝ってください。

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]; 

          } 
         } 
        } 
       } 
      } 
     } 
    } 
} 

ありがとうございます。

Bheem。

+0

その行にブレークポイントを追加します。 myDescription.PortTypesには何がありますか? –

答えて

0

は、私は多分あなたは港を望むたときに、portTypeのを見ていると思います。この

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]; 

         } 
        } 
       } 
      } 
     } 
    } 

を試してみてください? あなたが指しているサービスに定義されているportTypesがないようです。

EDIT ..................

OK]をクリックして、このいくつかのより多くの周りいじっ。アップロードされた石鹸UIとうんそのそこには...私は...それを私は、あなたが探しものを発見したことがあります... 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); 
     } 
    } 
} 

私は石鹸のUIのタブ名のパットでこれを気づいhitingしてみてください 考えます余分な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] 
+0

ポートではなくPORTTYPESを探しています。私はそれがSOAPで構文解析されているので、wsdlがうまくいると思うui – user2329702

+0

URLをハードコードしたくない – user2329702

関連する問題