動態呼叫WEB服務 以呼叫天氣為例子

2021-06-05 20:04:16 字數 3273 閱讀 4870

方法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...