C # dynamically call WebServices

Source: Internet
Author: User

I. Method InvokeWebservice

/// <Summary>

/// Call the remote WebService Method Based on the specified information

/// </Summary>

/// <Param name = "url"> http address of WebService </param>

/// <Param name = "namespace"> namespace of the WebService to be called </param>

/// <Param name = "classname"> name of the WebService class to be called (excluding the namespace prefix) </param>

/// <Param name = "methodname"> Method name of the WebService to be called </param>

/// <Param name = "args"> parameter list </param>

/// <Returns> execution result of WebService </returns>

/// <Remarks>

/// If the call fails, an Exception is thrown. During the call, an exception is intercepted as appropriate.

/// Exception information may occur in two places:

/// 1. CompileAssembly fails when a WebService is dynamically constructed.

/// 2. the WebService itself fails to be executed.

/// </Remarks>

/// <Example>

/// <Code>

/// Object obj = InvokeWebservice ("http: // localhost/GSP_WorkflowWebservice/common. asmx "," Genersoft. platform. service. workflow "," Common "," GetToolType ", new object [] {" 1 "});

/// </Code>

/// </Example>

Public static object InvokeWebservice (string url, string @ namespace, string classname, string methodname, object [] args)

{

Try

{

System. Net. WebClient wc = new System. Net. WebClient ();

System. IO. Stream stream = wc. OpenRead (url + "? WSDL ");

System. Web. Services. Description. ServiceDescription sd = System. Web. Services. Description. ServiceDescription. Read (stream );

System. Web. Services. Description. ServiceDescriptionImporter sdi = new System. Web. Services. Description. ServiceDescriptionImporter ();

Sdi. AddServiceDescription (sd ,"","");

System. CodeDom. CodeNamespace cn = new System. CodeDom. CodeNamespace (@ namespace );

System. CodeDom. CodeCompileUnit ccu = new System. CodeDom. CodeCompileUnit ();

Ccu. Namespaces. Add (cn );

Sdi. Import (cn, ccu );

Microsoft. CSharp. CSharpCodeProvider csc = new Microsoft. CSharp. CSharpCodeProvider ();

System. CodeDom. Compiler. ICodeCompiler icc = csc. CreateCompiler ();

System. CodeDom. Compiler. CompilerParameters cplist = new System. CodeDom. Compiler. CompilerParameters ();

Cplist. GenerateExecutable = false;

Cplist. GenerateInMemory = true;

Cplist. ReferencedAssemblies. Add ("System. dll ");

Cplist. ReferencedAssemblies. Add ("System. XML. dll ");

Cplist. ReferencedAssemblies. Add ("System. Web. Services. dll ");

Cplist. ReferencedAssemblies. Add ("System. Data. dll ");

System. CodeDom. Compiler. CompilerResults cr = icc. CompileAssemblyFromDom (cplist, ccu );

If (true = cr. Errors. HasErrors)

{

System. Text. StringBuilder sb = new System. Text. StringBuilder ();

Foreach (System. CodeDom. Compiler. CompilerError ce in cr. Errors)

{

Sb. Append (ce. ToString ());

Sb. Append (System. Environment. NewLine );

}

Throw new Exception (sb. ToString ());

}

System. Reflection. Assembly assembly = cr. CompiledAssembly;

Type t = assembly. GetType (@ namespace + "." + classname, true, true );

Object obj = Activator. CreateInstance (t );

System. Reflection. MethodInfo mi = t. GetMethod (methodname );

Return mi. Invoke (obj, args );

}

Catch (Exception ex)

{

Throw new Exception (ex. InnerException. Message, new Exception (ex. InnerException. StackTrace ));

}

}

 

Ii. Call

Object [] Object = new object [] {"Sun"}; // defines the object Array

Object aa = InvokeWebservice ("http: // 192.168.1.200: 111", "WebService2", "Service1", "show", Object );

TextBox1.Text = aa. ToString ();

Related Article

Contact Us

The content source of this page is from Internet, which doesn't represent Alibaba Cloud's opinion; products and services mentioned on that page don't have any relationship with Alibaba Cloud. If the content of the page makes you feel confusing, please write us an email, we will handle the problem within 5 days after receiving your email.

If you find any instances of plagiarism from the community, please send an email to: info-contact@alibabacloud.com and provide relevant evidence. A staff member will contact you within 5 working days.

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.