.Net 動態呼叫WebService
1.CSharp實現類
using System;
using System.Collections.Generic;
using System.Text;
using System.Net;
using System.IO;
using System.Web.Services.Description;
using System.CodeDom;
using Microsoft.CSharp;
using System.CodeDom.Compiler;
namespace WindowsApplication1
{
/// <summary>
///動態呼叫WebService
/// </summary>
public class WsCaller
{
/// <summary>
/// 獲取WebService型別
/// </summary>
/// <param name="wsUrl">WebService地址</param>
/// <returns></returns>
private static string GetWsClassName(string wsUrl)
{
string[] parts = wsUrl.Split('/');
string[] pps = parts[parts.Length - 1].Split('.');
return pps[0];
}
/// <summary>
/// 呼叫WebService
/// </summary>
/// <param name="wsUrl">WebService地址</param>
/// <param name="methodName">方法名稱</param>
/// <param name="args">引數列表</param>
/// <returns></returns>
public static object InvokeWebService(string wsUrl, string methodName, object[] args)
{
return InvokeWebService(wsUrl, null, methodName, args);
}
/// <summary>
/// 呼叫WebService
/// </summary>
/// <param name="wsUrl">WebService地址</param>
/// <param name="className">類名</param>
/// <param name="methodName">方法名稱</param>
/// <param name="args">引數列表</param>
/// <returns></returns>
public static object InvokeWebService(string wsUrl, string className, string methodName, object[] args)
{
string @namespace = "EnterpriseServerBase.WebService.DynamicWebCalling";
if ((className == null) || (className == ""))
{
className = GetWsClassName(wsUrl);
}
try
{
//獲取WSDL
WebClient wc = new WebClient();
Stream stream = wc.OpenRead(wsUrl + "?wsdl");
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 csc = new CSharpCodeProvider();
ICodeCompiler icc = csc.CreateCompiler();
//設定編譯引數
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)
{
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));
}
}
}
}
2.呼叫測試
A:建立Java編寫的WebService,公佈的一個方法為:HelloWorld,返回值為HelloWorld
B:建立CSharp編寫的WebService,公佈的一個方法為:HelloWorld,返回值為HelloWorld
呼叫方法程式碼如下:
try{
string url = "http://127.0.0.1:8090/HelloWorld/services/Service";
//string url = "http://localhost/WebService/Service.asmx";
//string[] args = new string[1];
//args[0] = "P000001";
object result = WsCaller.InvokeWebService(url, "HelloWorld", null); this.textBox1.Text = result.ToString();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
} 呼叫成功,返回值均可看到結果:HelloWorld!
相關推薦
asp.net 動態呼叫webservice方法
假設我們現在已經有一個做好的webservice方法: [WebMethod(Description = "獲取分包商進場計劃資訊明細(根據時間範圍)")] public string getSubcontractorPlanList(s
.Net 動態呼叫WebService
1.CSharp實現類 using System;using System.Collections.Generic;using System.Text;using System.Net;using System.IO;using System.Web.Services.Des
Net 下采用GET/POST/SOAP方式動態呼叫WebService C#實現
一直以來,我們都為動態呼叫WebService方法而煩惱。在.Net環境下,最常用的方法就是採用代理類來呼叫WebService,可以通過改變代理類的Url屬性來實現動態呼叫,但當xmlns改變時就會出錯,似乎要重新繫結Webservice並重新編譯後才能再次執行。我
cxf動態呼叫webservice慢的解決方案
CXF初次呼叫webservce很慢,是因為建立的過程比較耗時 初步方案可以結合快取(redis等)加快呼叫過程 //定義快取,加快建立效率 public static Map<String,Endpoint> factoryMap=new HashMap<Strin
轉載:動態呼叫WebService(C#)
#region InvokeWebService // 動態呼叫web服務 public static object InvokeWebService( string url, string methodname, object
.net core 呼叫 webservice
1,新增服務引用生成 客戶端程式碼 2,開始編碼 public static String GetInfoListData
.NET/C#呼叫webservice的坑
服務引用和Web服務引用是有區別的: 如果他的Service為 WCF Service 那得新增服務引用 , 如果是普通的WebServices 就新增 Web服務引用。 如果你的webservice呼叫是寫在dll裡面的, 那麼應該把dllnam
動態呼叫WebService服務的方法
public static object InvokeWebService(string url, string methodname, object[] args) { return WebServiceHelpe
動態呼叫webservice地址(類)
public static class WebServiceHelper { /// <summary> /// 動態呼叫WebService /// </summary>
C#不新增引用,動態呼叫webservice
好像很多人做WebService的時候都是直接新增引用的方式,然後呼叫服務端的方法。這樣就個問題,就是每次我服務端添加了方法或者修改了方法後都要更新Web引用,這樣比較麻煩。下面給一個不用新增引用的方式呼叫服務端的方法
C#動態呼叫webservice的方法
轉載自http://blog.sina.com.cn/s/blog_5d25ac4e0100yiel.html 一般情況下winform呼叫webservice時步驟 1新增服務引用---高階----新增web引用------填寫url--新增web引用即可完成對w
C# 之 動態呼叫WebService
通過前一篇部落格《WCF 之 AJax前臺呼叫WCF服務》我們可以不用配置終結點,而且可以動態的呼叫WCF服務。但是我們不僅僅要會動態的呼叫WCF服務,同時也需要研究一下怎麼樣動態的呼叫Web Service,今天就給大家介紹一下。 首先,我們先建立兩個Web Serv
Java動態呼叫Webservice,不生成客戶端,基於soapUI
近日專案一需求,需要實現動態解析Webservice滿足Webservice動態呼叫。參考過CXF、AXIS等非常成熟的相關框架技術,但在使用過程中發現,簡單物件(入參、出參)的時候很好用,當是複雜物件的時候很棘手!當然CXF、AXIS全然滿足,也支援物件,動態引數等,但構造
Winform動態呼叫Webservice的方法
1新增服務引用---高階----新增web引用------填寫url--新增web引用即可完成對webservice的引用 讓VS.NET環境來為我們生成服務代理,然後呼叫對應的Web服務。 如果需要動態呼叫WebService,要實現這樣的功能: publicstaticobjectInvokeWebSe
開發:隨筆記錄之 CXF 動態呼叫Webservice
import javax.xml.rpc.ServiceException; import org.apache.cxf.jaxws.endpoint.dynamic.JaxWsDynamicClientFactory; import org.apache.log4j.Lo
java客戶端動態呼叫webservice服務
之前呼叫webservice服務一直用jdk或者eclipse快速生成客戶端程式碼,這種方式實現起來也比較容易,據說這種方法執行效率也是最好的(動態呼叫也會動態生成客戶端程式碼)。但是我最近在專案發現這種方式存在一個嚴重的弊端,那就是當服務端有修改或變動,客戶端
動態呼叫WebService的兩種方法(多執行緒)
轉載:https://blog.csdn.net/huanglan513/article/details/46930393 在.net中,可以新增Web 引用來新增WebService,但是這種方法的缺陷是當WebService內的方法一變動,引用的系統這邊就必須更新引用,重新編譯,再發布,是不
C# 三種動態呼叫WebService的方法,測試通過
廢話少說,直接上碼: Python 伺服器端: import soaplib from soaplib.service import rpc from soaplib.service import DefinitionBase from soaplib.model.pr
終於搞定無參“動態呼叫WebService方法”,其實很簡單,大家還是要有信心,還是要有琢磨的精神。
終於搞定“動態呼叫WebService方法”: 我在學習 動態呼叫WebService方法時看到很多網友在呼叫函式(其實往往是“無參”函式)時得到一個錯誤: 未將物件引用設定到物件的例項。 這個錯誤很常見,貌似不好處理,沒明白的人不知所云,所以這裡提醒我們自己:凡是
C#中Winform動態呼叫Webservice的方法
一般情況下winform呼叫webservice時步驟 1新增服務引用---高階----新增web引用------填寫url--新增web引用即可完成對webservice的引用 讓VS.NET環境來為我們生成服務代理,然後呼叫對應的Web服務。 如果需要動態呼叫WebSe