2016-04-03 17 views
0

Servis referansı eklemeden bir web servisi çağıran bir istemci geliştiriyorum. Yöntem, bir XML olarak parametre alır. paralel olarakSSL üzerinden hizmet referansı eklemeden dinamik olarak bir web servisi nasıl çağrılır

static void Main(string[] args) 
    { 
     string xmlAux = string.Empty; 
     string link = "https://test.xxx.com/xxx/xxx.asmx";    

     string arg1 = @"<tuca> <hd> <t_doc>10</t_doc> <id_user>xxx</id_user> <pwd>xxx</pwd> <id_pais>xxx</id_pais> </hd> <parametros> <par tipo=""tipo_sujeto"">fisico</par> <par tipo=""calificacion"">xxx</par> <par tipo=""CEDULA DE IDENTIDAD"">xxx</par> </parametros> </tuca>"; 

     object[] arguments = { arg1 }; 

     var ws = CallWebService(link, "xxx", "Reporte", arguments); 

     if (ws != null) 
     { 
      xmlAux = ws.ToString(); 
     } 
    } 
    [System.Security.Permissions.SecurityPermissionAttribute(System.Security.Permissions.SecurityAction.Demand, Unrestricted = true)] 
    internal static object CallWebService(string webServiceAsmxUrl, string serviceName, string methodName, object[] args) 
    { 
     System.Net.WebClient client = new System.Net.WebClient(); 

     // Connect To the web service 
     System.IO.Stream stream = client.OpenRead(webServiceAsmxUrl + "?wsdl"); 

     // Now read the WSDL file describing a service. 
     var description = System.Web.Services.Description.ServiceDescription.Read(stream); 

     ///// LOAD THE DOM ///////// 
     // Initialize a service description importer. 
     var importer = new System.Web.Services.Description.ServiceDescriptionImporter(); 

     importer.ProtocolName = "Soap12"; // Use SOAP 1.2. 

     importer.AddServiceDescription(description, null, null); 

     // Generate a proxy client. 
     importer.Style = System.Web.Services.Description.ServiceDescriptionImportStyle.Client; 

     // Generate properties to represent primitive values. 
     importer.CodeGenerationOptions = System.Xml.Serialization.CodeGenerationOptions.GenerateProperties; 

     // Initialize a Code-DOM tree into which we will import the service. 
     var nmspace = new System.CodeDom.CodeNamespace(); 

     var unit1 = new System.CodeDom.CodeCompileUnit(); 
     unit1.Namespaces.Add(nmspace); 

     // Import the service into the Code-DOM tree. This creates proxy code that uses the service. 
     var warning = importer.Import(nmspace, unit1); 

     if (warning == 0) // If zero then we are good to go 
     { 
      // Generate the proxy code 
      var provider1 = System.CodeDom.Compiler.CodeDomProvider.CreateProvider("CSharp"); 

      // Compile the assembly proxy with the appropriate references 
      string[] assemblyReferences = new string[5] { "System.dll", "System.Web.Services.dll", "System.Web.dll", "System.Xml.dll", "System.Data.dll" }; 

      var parms = new System.CodeDom.Compiler.CompilerParameters(assemblyReferences); 

      var results = provider1.CompileAssemblyFromDom(parms, unit1); 

      // Check For Errors 
      if (results.Errors.Count > 0) 
      { 
       foreach (System.CodeDom.Compiler.CompilerError oops in results.Errors) 
       { 
        System.Diagnostics.Debug.WriteLine("========Compiler error============"); 
        System.Diagnostics.Debug.WriteLine(oops.ErrorText); 
       } 

       throw new System.Exception("Compile Error Occured calling webservice. Check Debug ouput window."); 

      } 

      // Finally, Invoke the web service method 
      object wsvcClass = results.CompiledAssembly.CreateInstance(serviceName); 

      var mi = wsvcClass.GetType().GetMethod(methodName); 

      return mi.Invoke(wsvcClass, args); 

     } 

     else 
     { 
      return null; 
     } 

    } 

:

InnerException:

return mi.Invoke(wsvcClass, args) 

durum atar { "Alt bağlantı kapatıldı: beklenmeyen bir hata almak bir oluştu."}

İleti: Bir çağrının hedefi tarafından istisna atıldı.

+0

Ben gördüğümü Sadece, bu aynı sorun var, System.Net ve SOAP kullanarak olduğuna eğer Çalıştığı argümanlara sahip olmayan bir servisi çağır, ancak argümanlar ile: Parametre sayısı uyuşmuyor, daha fazla argüman koymaya çalışabilirsiniz. – vladernn

cevap

İlgili konular