1, webservice是什麼? 是一個平臺獨立的,低耦合的,自包含的、基於可編程的web的應用程式,可使用開放的XML(標準通用標記語言下的一個子集)標準來描述、發佈、發現、協調和配置這些應用程式,用於開發分散式的互操作的應用程式。 2, webservice可以用來做什麼? 能使得運行在不同機 ...
1, webservice是什麼?
是一個平臺獨立的,低耦合的,自包含的、基於可編程的web的應用程式,可使用開放的XML(標準通用標記語言下的一個子集)標準來描述、發佈、發現、協調和配置這些應用程式,用於開發分散式的互操作的應用程式。
2, webservice可以用來做什麼?
能使得運行在不同機器上的不同應用無須藉助附加的、專門的第三方軟體或硬體, 就可相互交換數據或集成。依據Web Service規範實施的應用之間, 無論它們所使用的語言、 平臺或內部協議是什麼, 都可以相互交換數據。Web Service是自描述、 自包含的可用網路模塊, 可以執行具體的業務功能。Web Service也很容易部署, 因為它們基於一些常規的產業標準以及已有的一些技術,諸如標準通用標記語言下的子集XML、HTTP。Web Service減少了應用介面的花費。Web Service為整個企業甚至多個組織之間的業務流程的集成提供了一個通用機制。
3, webservice怎麼用?
方式一:直接添加服務引用 優點,簡單粗暴,直接開乾,缺點:服務引用地址更改後,則需要更改相應的源碼,相應測試,發佈。維護不方便。
方式二:WebService 動態代理類,優點:webservice 可進行配置,有更改時只需要更改相應配置文件即可,無需更改源碼;缺點:其實沒得啥子缺點,就是要把這個服務類放進項目中而已。代碼多了點而已。代理類代碼如下
1 /// <summary> 2 /// webservice動態代理類 3 /// </summary> 4 public class WebServiceAgentUtil 5 { 6 /// <summary> 7 /// 自定義一個代碼空間 8 /// </summary> 9 private const string CODE_NAMESPACE = "Application.WebServiceAgent.Dynamic"; 10 11 private string _url; 12 13 private object _agent; 14 15 private Type _serviceType; 16 17 /// <summary> 18 /// 初始化webservice代理 19 /// </summary> 20 /// <param name="url"></param> 21 public WebServiceAgentUtil(string url) 22 { 23 _url = url; 24 InitializeDynamicAgent(); 25 } 26 27 /// <summary> 28 /// 生產代理實例 29 /// </summary> 30 private void InitializeDynamicAgent() 31 { 32 try 33 { 34 //獲取WSDL 35 var wc = new WebClient(); 36 var stream = wc.OpenRead(_url + "?WSDL"); 37 var sd = ServiceDescription.Read(stream); 38 var classname = sd.Services[0].Name; 39 var sdi = new ServiceDescriptionImporter(); 40 sdi.AddServiceDescription(sd, "", ""); 41 var cn = new CodeNamespace(CODE_NAMESPACE); 42 43 //生成客戶端代理類代碼 44 var ccu = new CodeCompileUnit(); 45 ccu.Namespaces.Add(cn); 46 sdi.Import(cn, ccu); 47 var csc = new CSharpCodeProvider(); 48 49 //設定編譯參數 50 var cplist = new CompilerParameters 51 { 52 GenerateExecutable = false, 53 GenerateInMemory = true 54 }; 55 cplist.ReferencedAssemblies.Add("System.dll"); 56 cplist.ReferencedAssemblies.Add("System.XML.dll"); 57 cplist.ReferencedAssemblies.Add("System.Web.Services.dll"); 58 cplist.ReferencedAssemblies.Add("System.Data.dll"); 59 60 //編譯代理類 61 var cr = csc.CompileAssemblyFromDom(cplist, ccu); 62 if (cr.Errors.HasErrors) 63 { 64 var sb = new StringBuilder(); 65 foreach (CompilerError ce in cr.Errors) 66 { 67 sb.Append(ce.ToString()); 68 sb.Append(Environment.NewLine); 69 } 70 throw new Exception(sb.ToString()); 71 } 72 73 //生成代理實例 74 var assembly = cr.CompiledAssembly; 75 _serviceType = assembly.GetType(CODE_NAMESPACE + "." + classname, true, true); 76 _agent = Activator.CreateInstance(_serviceType); 77 } 78 catch 79 { 80 return; 81 } 82 } 83 84 /// <summary> 85 /// 調用webservice方法 86 /// </summary> 87 /// <param name="methodname">方法名</param> 88 /// <param name="args">參數列表</param> 89 /// <returns></returns> 90 public object InvokeWebService(string methodname, object[] args) 91 { 92 var mi = _serviceType.GetMethod(methodname); 93 return mi.Invoke(_agent, args); 94 } 95 }
調用方式(代碼如下):
1 string url = "webservice 所在地址,此可配置在config文件中"; 2 //初始化webservice 代理類 3 var wc = new WebServiceAgentUtil(url); 4 //調用webservice 5 //定義參數數組 6 var arr = new object[] { }; 7 //obj 為調用後返回結果集 8 var obj = wc.InvokeWebService("webservice方法名(大小寫匹配)", arr);
此博文為原創,轉載請註明出處!!!!!