日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

动态引用webservice

發布時間:2024/4/17 编程问答 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 动态引用webservice 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

整理過后的代碼

通過這個類可以將webservice提供的某個命名空間下的全部的類的實例

并可以通過invokemethod方法調用某個類的實例的方法

?

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????????///?根據指定的信息,調用遠程WebService方法
?75????????///?</summary>
?76????????
?77????????///?<param?name="classname">欲調用的WebService的類名(不包括命名空間前綴)</param>
?78????????///?<remarks>
?79????????///?如果調用失敗,將會拋出Exception。請調用的時候,適當截獲異常。
?80????????///?異常信息可能會發生在兩個地方:
?81????????///?1、動態構造WebService的時候,CompileAssembly失敗。
?82????????///?2、WebService本身執行失敗。
?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

總結

以上是生活随笔為你收集整理的动态引用webservice的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。