動態呼叫WebService方法

2021-09-06 10:57:53 字數 2373 閱讀 2881

好像很多人做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.建立...