創(chuàng)新互聯(lián)www.cdcxhl.cn八線動(dòng)態(tài)BGP香港云服務(wù)器提供商,新人活動(dòng)買多久送多久,劃算不套路!
這篇文章主要介紹c#調(diào)用WebService接口的方法,文中介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們一定要看完!
1、引用*.wsdl文件
WebService服務(wù)端會(huì)提供wsdl文件,客戶端通過該文件生成.cs文件以及生成.dll.
注意:若服務(wù)端只提供的了URL,在URL后面加上"?wsdl"在瀏覽器上訪問,復(fù)制頁面內(nèi)容,粘貼到文本文件,將文件后綴改為為"wsdl",即可得到wsdl文件。
通過URL或wsdl文件都可生成.cs文件。
生成.cs文件的方法有兩種,如下:
方法一:通過VS命令行工具生成
如上圖所示,輸入命令“wsdl /language:c# /n:CHEER.PresentationLayer /out:生成類的物理路徑(需先創(chuàng)建cs文件) WebService接口URL或wsdl文件物理路徑”即可。
方法二:VS中添加外部工具(方便以后使用)
VS工具菜單->外部工具->如下圖
輸入上圖紅框中的各個(gè)參數(shù),其中,命令是:C:\Program Files (x86)\Microsoft SDKs\Windows\v10.0A\bin\NETFX 4.6.1 Tools\wsdl.exe,即wsdl.exe的物理路徑。
初始目錄:$(ItemDir)表示當(dāng)前項(xiàng)目根目錄下。
命名空間使用時(shí)直接改成自定義的名稱即可。
下圖是該外部工具的使用,先自定義命名空間名稱,再在out:后面加上空格,再加上WebService的URL或wsdl文件物理路徑
2、已知WebService接口的URL,直接調(diào)用
在VS中,添加服務(wù)引用--高級(jí)--添加web引用 直接輸入webservice URL
然后,直接實(shí)例化該命名空間下的類的對(duì)象,調(diào)用該接口下的各個(gè)方法即可。
3、動(dòng)態(tài)調(diào)用WebService
先創(chuàng)建幫助類
/// <summary> /// 動(dòng)態(tài)調(diào)用WebService的幫助類 /// </summary> public class WebServiceHelper { #region InvokeWebService /// < summary> /// 動(dòng)態(tài)調(diào)用web服務(wù) ///< /summary> /// < param name="url">WSDL服務(wù)地址< /param> /// < param name="methodname">方法名< /param> /// < param name="args">參數(shù)< /param> /// < returns>< /returns> public object InvokeWebService(string url, string methodname, object[] args) { return this.InvokeWebService(url, null, methodname, args); } /// < summary> /// 動(dòng)態(tài)調(diào)用web服務(wù) /// < /summary> /// < param name="url">WSDL服務(wù)地址< /param> /// < param name="classname">類名< /param> /// < param name="methodname">方法名< /param> /// < param name="args">參數(shù)< /param> /// < returns>< /returns> public object InvokeWebService(string url, string classname, string methodname, object[] args) { string @namespace = "EnterpriseServerBase.WebService.DynamicWebCalling"; if ((classname == null) || (classname == "")) { classname = WebServiceHelper.GetWsClassName(url); } try { //獲取WSDL WebClient wc = new WebClient(); if (!url.ToUpper().Contains("WSDL")) { url = string.Format("{0}?{1}", url, "WSDL"); } Stream stream = wc.OpenRead(url); ServiceDescription sd = ServiceDescription.Read(stream); ServiceDescriptionImporter sdi = new ServiceDescriptionImporter(); sdi.AddServiceDescription(sd, "", ""); CodeNamespace cn = new CodeNamespace(@namespace); //生成客戶端代理類代碼 CodeCompileUnit ccu = new CodeCompileUnit(); ccu.Namespaces.Add(cn); sdi.Import(cn, ccu); CSharpCodeProvider icc = new CSharpCodeProvider(); //設(shè)定編譯參數(shù) CompilerParameters cplist = new 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"); //編譯代理類 CompilerResults cr = icc.CompileAssemblyFromDom(cplist, ccu); if (true == cr.Errors.HasErrors) { StringBuilder sb = new StringBuilder(); foreach (CompilerError ce in cr.Errors) { sb.Append(ce.ToString()); sb.Append(Environment.NewLine); } throw new Exception(sb.ToString()); } //生成代理實(shí)例,并調(diào)用方法 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)); } } private static string GetWsClassName(string wsUrl) { string[] parts = wsUrl.Split('/'); string[] pps = parts[parts.Length - 1].Split('.'); if (pps[0].Contains("?")) { return pps[0].Split('?')[0]; } return pps[0]; } #endregion } WebServiceHelper WebServiceHelper
分享標(biāo)題:c#調(diào)用WebService接口的方法-創(chuàng)新互聯(lián)
瀏覽地址:http://www.chinadenli.net/article32/deggpc.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供響應(yīng)式網(wǎng)站、網(wǎng)站營銷、域名注冊、小程序開發(fā)、搜索引擎優(yōu)化、App開發(fā)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容