一、普通的静态调用方法,可更换Url地址
?
localhost.WebService ws = new localhost.WebService(); ws.Url = "new url"; ws.HelloWorld ();
?
二、动态调用,性能较低
?
?
-
-
????????
-
????????
-
????????
-
????????
-
????????
-
????????
-
????????
-
????????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));
- ????????????}
- ????????}
(编辑:李大同)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!
|