Bonjour à tous,

Je développe une application qui prends en entrée plusieurs URL de webservices. Cette application est censée appeler une méthode particulière de chacun des web services.

L'url se compose ainsi: http://nom_serveur:port/nom_webservice.asmx

Après avoir fait plusieurs recherches j'ai vu que l'on pouvait utiliser la méthode qui permet d'appeler un web service dynamiquement (lien)

Du coup, après avoir fait un joli copier-coller intelligent, j'appelle mon service de cette manière:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
object result = WsProxy.CallWebService(URL, service, null, null);
remarque: mon web service ne prends rien en paramètre.

Le problème c'est que lors du déboguage, ma variable result obtient la valeur null...
Pourtant sous SOAPUI, j'obtiens ma réponse SOAP avec les balises qu'il faut.

Je penses que je m'y prends mal . Pouvez vous m'aider ?

PS: voici le code de ma classe proxy

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
 
using System;
using System.Collections.Generic;
using System.Text;
using System.Reflection;
using System.CodeDom;
using System.CodeDom.Compiler;
using System.Web.Services;
using System.Web.Services.Description;
using System.Web.Services.Discovery;
using System.Xml;
using System.Security.Permissions;
 
 
namespace WebApplication1
{
    internal class WsProxy
    {
        [SecurityPermissionAttribute(SecurityAction.Demand, Unrestricted = true)]
        internal static object CallWebService(string webServiceAsmxUrl, string serviceName, string methodName, object[] args)
        {
            try
            {
                System.Net.WebClient client = new System.Net.WebClient();
 
                client.Headers.Clear();
                //-Connect To the web service
                //System.IO.Stream stream = client.OpenRead(@webServiceAsmxUrl + "?wsdl");
                XmlTextReader xmlreader = new XmlTextReader(webServiceAsmxUrl + "?wsdl");
                //--Now read the WSDL file describing a service.
                ServiceDescription description = ServiceDescription.Read(xmlreader);
 
                ///// LOAD THE DOM /////////
                //--Initialize a service description importer.
                ServiceDescriptionImporter importer = new ServiceDescriptionImporter();
                importer.ProtocolName = "Soap12"; // Use SOAP 1.2.
                importer.AddServiceDescription(description, null, null);
                //--Generate a proxy client. 
                importer.Style = 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.
                CodeNamespace nmspace = new CodeNamespace();
                CodeCompileUnit unit1 = new CodeCompileUnit();
                unit1.Namespaces.Add(nmspace);
 
 
                //--Import the service into the Code-DOM tree. This creates proxy code
                //--that uses the service.
                ServiceDescriptionImportWarnings warning = importer.Import(nmspace, unit1);
                if (warning == 0) //--If zero then we are good to go
                {
                    //--Generate the proxy code 
                    CodeDomProvider provider1 = 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" };
                    CompilerParameters parms = new CompilerParameters(assemblyReferences);
                    CompilerResults results = provider1.CompileAssemblyFromDom(parms, unit1);
                    //-Check For Errors
                    if (results.Errors.Count > 0)
                    {
                        foreach (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);
                    System.Reflection.MethodInfo mi = wsvcClass.GetType().GetMethod(methodName);
                    return mi.Invoke(wsvcClass, args);
                }
                else
                {
                    return null;
                }
            }
            catch (Exception e)
            {
                //serviceActionsExternes._logger.Error("CallWebService " + e.Message);
                return null;
            }
        }
    }
}