天天看點

動态webservice和靜态webservice

一、普通的靜态調用方法,可更換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));

        }

繼續閱讀