在做多個系統整合的時候,由於各系統廠商採用不同的架構,在專案實施前期,各業務對業務理解不夠深入,系統介面可能會有較多變化,
在此背景下,動態呼叫webserivce就變得靈活了,降低了系統整合的耦合度。
下面介紹動態呼叫的具體步驟:
2. 使用 servicedescription 建立和格式化 wsdl 文件檔案。
3. 使用 servicedescriptionimporter 建立客戶端**類。
4. 使用 codedom 動態建立客戶端**類程式集。
5. 利用反射呼叫相關 webservice 方法。
其實與手工建立新增引用步驟一樣,只是在這裡把手動變成了自動而已,動態生成**類,利用反射動態呼叫了方法。
下面看**:**也是摘自博友的,只是作了一些小的修改,
1///< summary>
2///
動態呼叫web服務
3///
< /summary>
4///
< param name="url">
wsdl服務位址
< /param>
5///
< param name="classname">
類名< /param>
6///
< param name="methodname">
方法名< /param>
7///
< param name="args">
引數< /param>
8///
< returns>< /returns>
9public
object invokewebservice(string url, string classname, string methodname, object
args)
1016
try17
48throw
newexception(sb.tostring());49}
50//
生成**例項,並呼叫方法
51 system.reflection.assembly assembly =cr.compiledassembly;
52 type t = assembly.gettype(@namespace + "
." + classname, true, true
);53
object obj =activator.createinstance(t);
54 system.reflection.methodinfo mi =t.getmethod(methodname);
55return
mi.invoke(obj, args);
56/*
57* propertyinfo propertyinfo = type.getproperty(propertyname);
58* return propertyinfo.getvalue(obj, null);
59*
*/60}61
catch
(exception ex)
6265}66
private
static
string getwsclassname(string
wsurl)
67
單元測試**:
1///2
///invokewebservice 的測試
3///
4[testmethod()]
5public
void
invokewebservicetest()6;
12object args = a; //
todo: 初始化為適當的值
13object expected = null; //
todo: 初始化為適當的值
14object
actual;
15 actual =target.invokewebservice(url, classname, methodname, args);
16assert.areequal(expected, actual);
17 assert.inconclusive("
驗證此測試方法的正確性。");
18 }
C 動態呼叫WebService
使用示例 trycatch exception ex 類檔案 using system using system.web using system.xml using system.collections using system.net using system.text using system...
C 動態呼叫WebService
原文 c 動態呼叫webservice c 動態webservice呼叫 string public string wstest string suc string wsd.executequery name,str return suc c using system using system.co...
c 動態呼叫 WebService
public class wshelper summary 動態呼叫web服務 summary param name url wsdl服務位址 param param name classname 類名 param param name methodname 方法名 param param name...