在C 中動態呼叫WebService

2021-04-22 10:47:38 字數 2870 閱讀 7735

using system;

using system.io;

using system.net;

using system.reflection;

using system.codedom;

using system.codedom.compiler;

using microsoft.csharp;

using system.web.services.description;

using system.collections.generic;

//具體步驟:

namespace websvrcaller

private static type gettypefromcache(string url, string classname)

private static type gettypefromwebservice(string url, string classname)

//獲取wsdl

webclient webclient = new webclient();

stream stream = webclient.openread(url + "?wsdl");

servicedescription servicedes = servicedescription.read(stream);

servicedescriptionimporter servicedescriptionimporter = new servicedescriptionimporter();

servicedescriptionimporter.addservicedescription(servicedes, "", "");

codenamespace codenamespace = new codenamespace(@namespace);

//生成客戶端**類**

codecompileunit codecompileunit = new codecompileunit();

codecompileunit.namespaces.add(codenamespace);

servicedescriptionimporter.import(codenamespace, codecompileunit);

csharpcodeprovider csharpcodeprovider = new csharpcodeprovider();

icodecompiler icodecompiler = csharpcodeprovider.createcompiler();

//設定編譯引數

compilerparameters compilerparams = new compilerparameters();

compilerparams.generateexecutable = false;

compilerparams.generateinmemory = true;

compilerparams.referencedassemblies.add("system.dll");

compilerparams.referencedassemblies.add("system.xml.dll");

compilerparams.referencedassemblies.add("system.web.services.dll");

compilerparams.referencedassemblies.add("system.data.dll");

//生成**例項,並呼叫方法

system.reflection.assembly assembly = compilerresult.compiledassembly;

type t = assembly.gettype(@namespace + "." + classname, true, true);

return t;

}//動態呼叫web服務

public static object invokewebservice(string url, string methodname, object args)

public static object invokewebservice(string url, string classname, string methodname, object args)

object obj = activator.createinstance(t);

methodinfo mi = t.getmethod(methodname);

return mi.invoke(obj, args);

}catch (exception ex)

}private static string getwsclassname(string wsurl)

#endregion}}

呼叫:using system;

using system.collections.generic;

using system.componentmodel;

using system.data;

using system.drawing;

using system.text;

using system.windows.forms;

using system.net;

using system.io;

using microsoft.csharp;

using system.reflection;

using system.codedom;

using system.codedom.compiler;

using system.web.services.description;

using websvrcaller;

namespace test

在C 中動態載入類(在程式中呼叫DLL檔案)

本人剛剛開始編寫程式不久,開發中發現一非常好的方法。大家共享。我們在編寫程式的時候經常會遇到這樣的情況 程式中要用到某種計算,而且這種計算的計算方式很多,我們不得不在編寫程式時就要考慮的十分全面,將各種情況到考慮到。但是這樣做又非常的費力,因為我們無法 到程式編好後,還會出現什麼樣的計算方式。如果計...

在C 中呼叫C語言標準動態庫方法

cisco packet tracer 5.0軟體深入詳解使用教程 3 詳解網路嗅探工具的原理 sniffer wireshark 2010 年 07 月 19 日 seth c net程式設計 go to comment out mylib.dll dll implib mylib.lib myl...

在C 中動態呼叫native dll的匯出函式

在 c 中我們能夠通過 loadlibrary,getprocaddress 來動態呼叫 dll 的匯出函式.在 c 中也能夠用這樣的方式嗎?在 dotnet 2.0 裡面這樣是可以的,這完全得益於 2.0新增的乙個函式 marshal.getdelegateforfunctionpointer 方...