c# – Web Services Dynamic Invoker问题
发布时间:2020-12-16 01:30:12 所属栏目:百科 来源:网络整理
导读:我一直在使用Web服务上的属性,我已经看到SoapHttpClientProtocol类需要定义一个WebServiceBinding属性. 看到这个question似乎无法修改运行时的属性,如何实现动态Web服务调用在运行时更改此属性?可能吗? [编辑] 我正在寻找一种方法来执行动态调用“泛型样式
我一直在使用Web服务上的属性,我已经看到SoapHttpClientProtocol类需要定义一个WebServiceBinding属性.
看到这个question似乎无法修改运行时的属性,如何实现动态Web服务调用在运行时更改此属性?可能吗? [编辑] 简而言之,这是我的班级: using System.Web.Services; using System.Web.Services.Protocols; namespace Whatever { [WebServiceBinding(Name = "",Namespace = "")] public class WebServiceInvoker : SoapHttpClientProtocol { public WebServiceInvoker(string url,string ns,string bindingName) { ChangeNamespace(ns); ChangeBinding(bindingName); Url = url; // credentials,etc } public void ChangeNamespace(string ns) { var att = GetType().GetCustomAttributes(typeof (WebServiceBindingAttribute),true); if (att.Length > 0) { // doesn't work ((WebServiceBindingAttribute)att[0]).Namespace = ns; } } private void ChangeBinding(string bindingName) { var att = GetType().GetCustomAttributes(typeof(WebServiceBindingAttribute),true); if (att.Length > 0) { // doesn't work ((WebServiceBindingAttribute)att[0]).Name = bindingName; } } public object[] MakeInvoke(string method,object[] args) { var res = Invoke(method,method); return res; } public TRet InvokeFunction<TRet>(string method) { //Funcion<T1,T2,T3,TRet> var res = Invoke(method,null); return MyUtils.ForceCast<TRet>(res); } public TRet InvokeFunction<T1,TRet>(string method,T1 par1) { //Funcion<T1,TRet> var args = new object[] { par1 }; var res = Invoke(method,args); return MyUtils.ForceCast<TRet>(res); } public TRet InvokeFunction<T1,T1 par1,T2 par2) { //Funcion<T1,TRet> var args = new object[] { par1,par2 }; var res = Invoke(method,T2 par2,T3 par3) { //Funcion<T1,TRet> var args = new object[] {par1,par2,par3}; var res = Invoke(method,args); return MyUtils.ForceCast<TRet>(res); } public void InvokeAction(string metodo) { //Funcion<T1,TRet> Invoke(method,null); } public void InvokeAction<T1>(string method,TRet> var args = new object[] { par1 }; Invoke(method,args); } public void InvokeAction<T1,T2>(string method,par2 }; Invoke(method,T3>(string method,par3 }; Invoke(method,args); } } } [编辑] var miProxy = new WebServiceInvoker("http://webServiceLocation","ns","Binding"); var res = miProxy.InvokeFunction<string,string,Entity>("MyWebMethod",stringPar1,stringPar2); 解决方法
我不确定你要在这里完成什么…你是否正在尝试创建一个支持调用者调用任意方法的Web服务?如果是这样,这里有一个例子:
Creating a dynamic Web service to simplify code
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |