方法1:
using system;
using system.net;
using system.io;
using system.codedom;
using microsoft.csharp;
using system.codedom.compiler;
using system.web.services.description;
using system.web.services.protocols;
namespace globaltechnologyinc.snmpproject.customclass
/// /// 動態呼叫web服務
///
/// wsdl服務位址
/// 類名
/// 方法名
/// 引數
///
public static object invokewebservice(string url, string classname, string methodname, object args)
trythrow 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);
/*propertyinfo propertyinfo = type.getproperty(propertyname);
return propertyinfo.getvalue(obj, null);*/}
catch (exception ex)
}private static string getwsclassname(string wsurl)
#endregion
}}
方法2:
public class autowebservices
/// /// 動態呼叫webservice
///
/// webservice位址
/// 類名
/// 方法名(模組名)
/// 引數列表
/// object
public static object invokewebservice(string url, string classname, string methodname, object args)
//獲取服務描述語言(wsdl)
webclient wc = new webclient();
stream stream = wc.openread(url + "?wsdl");//
servicedescription sd = servicedescription.read(stream);//
servicedescriptionimporter sdi = new servicedescriptionimporter();//
sdi.addservicedescription(sd, "", "");
codenamespace cn = new codenamespace(@namespace);//
//生成客戶端**類**
codecompileunit ccu = new codecompileunit();//
ccu.namespaces.add(cn);
sdi.import(cn, ccu);
csharpcodeprovider csc = new csharpcodeprovider();//
icodecompiler icc = csc.createcompiler();//
//設定編譯器的引數
compilerparameters cplist = new 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");
//編譯**類
compilerresults cr = icc.compileassemblyfromdom(cplist, ccu);//
if (true == cr.errors.haserrors)
throw new exception(sb.tostring());
}//生成**例項,並呼叫方法
system.reflection.assembly assembly = cr.compiledassembly;
type t = assembly.gettype(@namespace + "." + classname, true, true);
object bj = activator.createinstance(t);//
system.reflection.methodinfo mi = t.getmethod(methodname);//
return mi.invoke(bj, args);
} private static string getclassname(string url)
}
呼叫:
string args = new string[2];
args[0] = "重慶";
args[1] = "";
object a = autowebservices.invokewebservice("", "getweather", args);
this.textbox1.text += a.tostring();
動態呼叫web服務
通常我們在程式中需要呼叫webservice時,都是通過 新增web引用 讓vs.net環境來為我們生成服務 然後呼叫對應的web服務。這樣是使工作簡單了,但是卻和提供web服務的url 方法名 引數繫結在一起了,這是vs.net自動為我們生成web服務 的限制。如果哪一天發布web服務的url改變...
動態呼叫web服務
通常我們在程式中需要呼叫webservice時,都是通過 新增web引用 讓vs.net環境來為我們生成服務 然後呼叫對應的web服務。這樣是使工作簡單了,但是卻和提供web服務的url 方法名 引數繫結在一起了,這是vs.net自動為我們生成web服務 的限制。如果哪一天發布web服務的url改變...
C 動態呼叫Web服務方法
using system using system.net using system.io using system.codedom using microsoft.csharp using system.codedom.compiler using system.web.services.desc...