好像很多人做webservice的時候都是直接新增引用的方式,然後呼叫服務端的方法.這樣就個問題,就是每次我服務端新增了方法或者修改了方法後都要更新web引用,這樣比較麻煩.下面給乙個不用新增引用的方式呼叫服務端的方法.只是乙個簡單的測試,不是很規範,用得著的人可以自己封裝一下,然後直接傳服務端的方法名進去,type.getmethod獲取方法,然後method.invoke返回結果
高手些多多包函,主要是給用得著的人參考一下,互相學習.**主要是用了 system.web.services.description裡的東西
新建乙個webservice專案,新增以下**:
c# code
using
system;
using
system.collections.generic;
using
system.linq;
using
system.web;
using
system.web.services;
namespace
testwebservice
[webmethod]
public
string
test()
[webmethod(cacheduration =60
,description ="
測試")]public
list
<
string
>
getpersons() }
} 下面是客戶端:
c# code
using
system;
using
system.io;
using
system.collections.generic;
using
system.linq;
using
system.collections;
using
system.web;
using
system.net;
using
system.reflection;
using
system.codedom;
using
system.codedom.compiler;
using
system.web.services;
using
system.text;
using
system.web.services.description;
using
system.web.services.protocols;
using
system.xml.serialization;
using
system.windows.forms;
namespace
class
program
assembly asm
=assembly.loadfrom(
"mytest.dll");
//載入前面生成的程式集
type t
=asm.gettype(
"testwebservice.testwebservice");
objecto =
activator.createinstance(t);
methodinfo method
=t.getmethod(
"getpersons");
//getpersons是服務端的方法名稱,你想呼叫服務端的什麼方法都可以在這裡改,最好封裝一下
string item
=(string)method.invoke(o,
null
);//
注:method.invoke(o, null)返回的是乙個object,如果你服務端返回的是dataset,這裡也是用(dataset)method.invoke(o, null)轉一下就行了
foreach
(string
str
initem)
console.writeline(str);
//上面是根據webservice位址,模似生成乙個**類,如果你想看看生成的**檔案是什麼樣子,可以用以下**儲存下來,預設是儲存在bin目錄下面
textwriter writer
=file.createtext(
"mytest.cs
");
provider.generatecodefromcompileunit(unit, writer,
null
);writer.flush();
writer.close();} }
}
動態呼叫WebService
public static object invokewebservice string url,string methodname,object args 其中,url是web服務的位址,methodname是要呼叫服務方法名,args是要呼叫web服務所需的引數,返回值就是web服務返回的結果了...
動態呼叫webservice
protected string testservice string strurl,string methodname assembly asm assembly.loadfrom mytest.dll 載入前面生成的程式集 type t asm.gettype testwebservice.se...
動態呼叫WebService
1.大多數情況下,我們都是在vs裡面通過新增web引用的方式,在客戶端自動生成客戶端 去呼叫webservice的,有時候,伺服器端的位址可能會經常變,這裡就需要動態的呼叫webservice,一種是服務沒有變化只是ip位址變化了,這樣我們只需要在獲取客戶端 的時候,將其url位址修改即可。2.建立...