动态引用webservice
生活随笔
收集整理的這篇文章主要介紹了
动态引用webservice
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
整理過(guò)后的代碼
通過(guò)這個(gè)類可以將webservice提供的某個(gè)命名空間下的全部的類的實(shí)例
并可以通過(guò)invokemethod方法調(diào)用某個(gè)類的實(shí)例的方法
?
Code??1using?System;
??2using?System.Collections.Generic;
??3using?System.Linq;
??4using?System.Web;
??5using?System.Xml;
??6using?System.Web.Services.Description;
??7using?System.CodeDom;
??8using?System.CodeDom.Compiler;
??9
?10namespace?Ecommerce.Web.AppCode
?11{
?12????public?class?DynamicService
?13????{
?14????????private?static?string?_url?=?string.Empty;
?15
?16????????public?static?string?Url
?17????????{
?18????????????get?{?return?_url;?}
?19????????????set?{?_url?=?value;?}
?20????????}
?21
?22????????private?static?string?_nameSpace?=?string.Empty;
?23
?24????????/**////?<summary>
?25????????///?Namespace?of?the?classes
?26????????///?</summary>
?27????????public?static?string?NameSpace
?28????????{
?29????????????get?{?return?_nameSpace;?}
?30????????????set?{?_nameSpace?=?value;?}
?31????????}
?32
?33????????private?static?IList<string>?_classNames?=?null;
?34
?35????????/**////?<summary>
?36????????///?All?classes's?names
?37????????///?</summary>
?38????????public?static?IList<string>?ClassNames
?39????????{
?40????????????get?{?return?_classNames;?}
?41????????????set
?42????????????{
?43????????????????IList<string>?nameList?=?value;
?44
?45????????????????if?(nameList?==?null?||?nameList.Count?<=?0)
?46????????????????????throw?new?Exception("No?class?name?is?in?the?list,?please?check!");
?47
?48????????????????_classNames?=?nameList;
?49????????????}
?50????????}
?51
?52????????private?static?IDictionary<string,?object>?classList?=?null;
?53
?54????????/**////?<summary>
?55????????///?Get?class's?instances?to?use?in?webservice
?56????????///?</summary>
?57????????public?static?IDictionary<string,?object>?ClassList
?58????????{
?59????????????get
?60????????????{
?61????????????????IDictionary<string,?Object>?classNameObjList?=?new?Dictionary<string,?Object>();
?62
?63????????????????foreach?(var?item?in?_classNames)
?64????????????????{
?65????????????????????object?instance?=?InvokeWebservice(item);
?66????????????????????classNameObjList.Add(item,?instance);
?67????????????????}
?68
?69????????????????return?classNameObjList;
?70????????????}
?71????????}
?72
?73????????/**////?<summary>
?74????????///?根據(jù)指定的信息,調(diào)用遠(yuǎn)程WebService方法
?75????????///?</summary>
?76????????
?77????????///?<param?name="classname">欲調(diào)用的WebService的類名(不包括命名空間前綴)</param>
?78????????///?<remarks>
?79????????///?如果調(diào)用失敗,將會(huì)拋出Exception。請(qǐng)調(diào)用的時(shí)候,適當(dāng)截獲異常。
?80????????///?異常信息可能會(huì)發(fā)生在兩個(gè)地方:
?81????????///?1、動(dòng)態(tài)構(gòu)造WebService的時(shí)候,CompileAssembly失敗。
?82????????///?2、WebService本身執(zhí)行失敗。
?83????????///?</remarks>
?84????????///?<example>
?85????????///?<code>
?86????????///?object?obj?=?InvokeWebservice("http://localhost/GSP_WorkflowWebservice/common.asmx","Genersoft.Platform.Service.Workflow","Common","GetToolType",new?object[]{"1"});
?87????????///?</code>
?88????????///?</example>
?89????????public?static?object?InvokeWebservice(string?classname)
?90????????{
?91????????????try
?92????????????{
?93????????????????System.Net.WebClient?wc?=?new?System.Net.WebClient();
?94????????????????System.IO.Stream?stream?=?wc.OpenRead(_url?+?"?WSDL");
?95????????????????System.Web.Services.Description.ServiceDescription?sd?=?System.Web.Services.Description.ServiceDescription.Read(stream);
?96????????????????System.Web.Services.Description.ServiceDescriptionImporter?sdi?=?new?System.Web.Services.Description.ServiceDescriptionImporter();
?97????????????????sdi.AddServiceDescription(sd,?"",?"");
?98????????????????System.CodeDom.CodeNamespace?cn?=?new?System.CodeDom.CodeNamespace(_nameSpace);
?99????????????????System.CodeDom.CodeCompileUnit?ccu?=?new?System.CodeDom.CodeCompileUnit();
100????????????????ccu.Namespaces.Add(cn);
101????????????????sdi.Import(cn,?ccu);
102
103????????????????Microsoft.CSharp.CSharpCodeProvider?csc?=?new?Microsoft.CSharp.CSharpCodeProvider();
104????????????????System.CodeDom.Compiler.ICodeCompiler?icc?=?csc.CreateCompiler();
105
106????????????????System.CodeDom.Compiler.CompilerParameters?cplist?=?new?System.CodeDom.Compiler.CompilerParameters();
107????????????????cplist.GenerateExecutable?=?false;
108????????????????cplist.GenerateInMemory?=?true;
109????????????????cplist.ReferencedAssemblies.Add("System.dll");
110????????????????cplist.ReferencedAssemblies.Add("System.XML.dll");
111????????????????cplist.ReferencedAssemblies.Add("System.Web.Services.dll");
112????????????????cplist.ReferencedAssemblies.Add("System.Data.dll");
113
114????????????????System.CodeDom.Compiler.CompilerResults?cr?=?icc.CompileAssemblyFromDom(cplist,?ccu);
115????????????????if?(true?==?cr.Errors.HasErrors)
116????????????????{
117????????????????????System.Text.StringBuilder?sb?=?new?System.Text.StringBuilder();
118????????????????????foreach?(System.CodeDom.Compiler.CompilerError?ce?in?cr.Errors)
119????????????????????{
120????????????????????????sb.Append(ce.ToString());
121????????????????????????sb.Append(System.Environment.NewLine);
122????????????????????}
123????????????????????throw?new?Exception(sb.ToString());
124????????????????}
125????????????????System.Reflection.Assembly?assembly?=?cr.CompiledAssembly;
126????????????????Type?t?=?assembly.GetType(_nameSpace?+?"."?+?classname,?true,?true);
127????????????????object?obj?=?Activator.CreateInstance(t);
128
129????????????????return?obj;
130????????????}
131????????????catch?(Exception?ex)
132????????????{
133????????????????throw?new?Exception(ex.InnerException.Message,?new?Exception(ex.InnerException.StackTrace));
134????????????}
135????????}
136
137????????/**////?<summary>
138????????///?Invoke?the?method?in?this?class?by?specifying?the?method?name
139????????///?</summary>
140????????///?<param?name="classInstance"></param>
141????????///?<param?name="functionName"></param>
142????????///?<param?name="args"></param>
143????????///?<returns></returns>
144????????public?static?object?InvokeMethod(object?classInstance,?string?functionName,object[]?args)
145????????{
146????????????System.Reflection.MethodInfo?mi?=?classInstance.GetType().GetMethod(functionName);
147????????????return?mi.Invoke(classInstance,?args);
148????????}
149????}
150}
151
總結(jié)
以上是生活随笔為你收集整理的动态引用webservice的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: iPhone放大模式详解
- 下一篇: UIImagePickerControl