一、普通的静态调用方法,可更换url地址
localhost.webservice ws = new localhost.webservice();
ws.url = "new url";
ws.helloworld ();
二、动态调用,性能较低
///<summary>
///动态web服务代理方法
///</summary>
///<param name="@namespace">传入空间命名</param>
///<param name="url">传入url参数</param>
///<param name="classname">传入类名</param>
///<param name="methodname">传入方法名</param>
///<param name="args">传入参数,本参数为顺序参数</param>
public object invokewebservice(string url, string @namespace, string classname, string methodname, object[] args)
{
try
{
system.net.webclient wc = new system.net.webclient();
system.io.stream stream = wc.openread(url + "?wsdl");
system.web.services.description.servicedescription sd = system.web.services.description.servicedescription.read(stream);
system.web.services.description.servicedescriptionimporter sdi = new system.web.services.description.servicedescriptionimporter();
sdi.addservicedescription(sd, "", "");
system.codedom.codenamespace cn = new system.codedom.codenamespace(@namespace);
system.codedom.codecompileunit ccu = new system.codedom.codecompileunit();
ccu.namespaces.add(cn);
sdi.import(cn, ccu);
microsoft.csharp.csharpcodeprovider csc = new microsoft.csharp.csharpcodeprovider();
system.codedom.compiler.icodecompiler icc = csc.createcompiler();
system.codedom.compiler.compilerparameters cplist = new system.codedom.compiler.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");
system.codedom.compiler.compilerresults cr = icc.compileassemblyfromdom(cplist, ccu);
if (true == cr.errors.haserrors)
{
system.text.stringbuilder sb = new system.text.stringbuilder();
foreach (system.codedom.compiler.compilererror ce in cr.errors)
{
sb.append(ce.tostring());
sb.append(system.environment.newline);
}
throw 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);
}
catch (exception ex)
throw new exception(ex.innerexception.message, new exception(ex.innerexception.stacktrace));
}