请问关于c的具体应用场景有哪些?
- 内容介绍
- 文章标签
- 相关推荐
本文共计848个文字,预计阅读时间需要4分钟。
我一直在使用Web服务的属性,已经注意到`SoapHttpClientProtocol`类需要定义一个`WebServiceBinding`属性。针对这个问题,似乎无法直接在运行时修改该属性。为了实现运行时动态更改Web服务调用中的此属性,可以考虑以下方法:
1. 创建一个自定义的`SoapHttpClientProtocol`类,继承自原始的`SoapHttpClientProtocol`。
2.在自定义类中,覆盖需要修改的属性。
3.在运行时,创建自定义类的实例,并根据需要动态设置属性值。
以下是实现这一功能的示例代码:
java
import javax.xml.namespace.QName;import javax.xml.rpc.ServiceException;import javax.xml.rpc.http.HttpService;import javax.xml.rpc.soap.SOAPException;import javax.xml.rpc.soap.SOAPFaultException;public class CustomSoapHttpClientProtocol extends SoapHttpClientProtocol { private WebServiceBinding webServiceBinding;
public CustomSoapHttpClientProtocol() { super(); this.webServiceBinding=new WebServiceBinding(); }
@Override public WebServiceBinding getWebServiceBinding() { return webServiceBinding; }
@Override public void setWebServiceBinding(WebServiceBinding webServiceBinding) { this.webServiceBinding=webServiceBinding; }
public static void main(String[] args) { try { CustomSoapHttpClientProtocol customProtocol=new CustomSoapHttpClientProtocol(); // 设置自定义的WebServiceBinding属性 customProtocol.setWebServiceBinding(new WebServiceBinding(new QName(http://example.com, newBinding)));
// 创建HttpService实例 HttpService httpService=new HttpService(); httpService.setServiceEndpointInterface(com.example.MyService); httpService.setPort(customProtocol);
// 进行Web服务调用 // ... } catch (ServiceException | SOAPException | SOAPFaultException e) { e.printStackTrace(); } }}
通过这种方式,您可以在运行时动态更改`WebServiceBinding`属性,从而实现动态Web服务调用。
我一直在使用Web服务上的属性,我已经看到SoapHttpClientProtocol类需要定义一个WebServiceBinding属性.看到这个question似乎无法修改运行时的属性,如何实现动态Web服务调用在运行时更改此属性?可能吗?
[编辑]
我正在寻找一种方法来执行动态调用“泛型样式”,而不是修改WebServiceBinding属性.
简而言之,这是我的班级:
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, T2, T3, TRet> var args = new object[] { par1 }; var res = Invoke(method, args); return MyUtils.ForceCast<TRet>(res); } public TRet InvokeFunction<T1, T2, TRet>(string method, T1 par1, T2 par2) { //Funcion<T1, T2, T3, TRet> var args = new object[] { par1, par2 }; var res = Invoke(method, args); return MyUtils.ForceCast<TRet>(res); } public TRet InvokeFunction<T1, T2, T3, TRet>(string method, T1 par1, T2 par2, T3 par3) { //Funcion<T1, T2, T3, 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, T2, T3, TRet> Invoke(method, null); } public void InvokeAction<T1>(string method, T1 par1) { //Funcion<T1, T2, T3, TRet> var args = new object[] { par1 }; Invoke(method, args); } public void InvokeAction<T1, T2>(string method, T1 par1, T2 par2) { //Funcion<T1, T2, T3, TRet> var args = new object[] { par1, par2 }; Invoke(method, args); } public void InvokeAction<T1, T2, T3>(string method, T1 par1, T2 par2, T3 par3) { //Funcion<T1, T2, T3, TRet> var args = new object[] { par1, par2, par3 }; Invoke(method, args); } } }
[编辑]
我想这样打电话给我的班级:
var miProxy = new WebServiceInvoker("webServiceLocation", "ns", "Binding"); var res = miProxy.InvokeFunction<string, string, Entity>("MyWebMethod", stringPar1, stringPar2); 我不确定你要在这里完成什么…你是否正在尝试创建一个支持调用者调用任意方法的Web服务?如果是这样,这里有一个例子: Creating a dynamic Web service to simplify code
本文共计848个文字,预计阅读时间需要4分钟。
我一直在使用Web服务的属性,已经注意到`SoapHttpClientProtocol`类需要定义一个`WebServiceBinding`属性。针对这个问题,似乎无法直接在运行时修改该属性。为了实现运行时动态更改Web服务调用中的此属性,可以考虑以下方法:
1. 创建一个自定义的`SoapHttpClientProtocol`类,继承自原始的`SoapHttpClientProtocol`。
2.在自定义类中,覆盖需要修改的属性。
3.在运行时,创建自定义类的实例,并根据需要动态设置属性值。
以下是实现这一功能的示例代码:
java
import javax.xml.namespace.QName;import javax.xml.rpc.ServiceException;import javax.xml.rpc.http.HttpService;import javax.xml.rpc.soap.SOAPException;import javax.xml.rpc.soap.SOAPFaultException;public class CustomSoapHttpClientProtocol extends SoapHttpClientProtocol { private WebServiceBinding webServiceBinding;
public CustomSoapHttpClientProtocol() { super(); this.webServiceBinding=new WebServiceBinding(); }
@Override public WebServiceBinding getWebServiceBinding() { return webServiceBinding; }
@Override public void setWebServiceBinding(WebServiceBinding webServiceBinding) { this.webServiceBinding=webServiceBinding; }
public static void main(String[] args) { try { CustomSoapHttpClientProtocol customProtocol=new CustomSoapHttpClientProtocol(); // 设置自定义的WebServiceBinding属性 customProtocol.setWebServiceBinding(new WebServiceBinding(new QName(http://example.com, newBinding)));
// 创建HttpService实例 HttpService httpService=new HttpService(); httpService.setServiceEndpointInterface(com.example.MyService); httpService.setPort(customProtocol);
// 进行Web服务调用 // ... } catch (ServiceException | SOAPException | SOAPFaultException e) { e.printStackTrace(); } }}
通过这种方式,您可以在运行时动态更改`WebServiceBinding`属性,从而实现动态Web服务调用。
我一直在使用Web服务上的属性,我已经看到SoapHttpClientProtocol类需要定义一个WebServiceBinding属性.看到这个question似乎无法修改运行时的属性,如何实现动态Web服务调用在运行时更改此属性?可能吗?
[编辑]
我正在寻找一种方法来执行动态调用“泛型样式”,而不是修改WebServiceBinding属性.
简而言之,这是我的班级:
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, T2, T3, TRet> var args = new object[] { par1 }; var res = Invoke(method, args); return MyUtils.ForceCast<TRet>(res); } public TRet InvokeFunction<T1, T2, TRet>(string method, T1 par1, T2 par2) { //Funcion<T1, T2, T3, TRet> var args = new object[] { par1, par2 }; var res = Invoke(method, args); return MyUtils.ForceCast<TRet>(res); } public TRet InvokeFunction<T1, T2, T3, TRet>(string method, T1 par1, T2 par2, T3 par3) { //Funcion<T1, T2, T3, 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, T2, T3, TRet> Invoke(method, null); } public void InvokeAction<T1>(string method, T1 par1) { //Funcion<T1, T2, T3, TRet> var args = new object[] { par1 }; Invoke(method, args); } public void InvokeAction<T1, T2>(string method, T1 par1, T2 par2) { //Funcion<T1, T2, T3, TRet> var args = new object[] { par1, par2 }; Invoke(method, args); } public void InvokeAction<T1, T2, T3>(string method, T1 par1, T2 par2, T3 par3) { //Funcion<T1, T2, T3, TRet> var args = new object[] { par1, par2, par3 }; Invoke(method, args); } } }
[编辑]
我想这样打电话给我的班级:
var miProxy = new WebServiceInvoker("webServiceLocation", "ns", "Binding"); var res = miProxy.InvokeFunction<string, string, Entity>("MyWebMethod", stringPar1, stringPar2); 我不确定你要在这里完成什么…你是否正在尝试创建一个支持调用者调用任意方法的Web服务?如果是这样,这里有一个例子: Creating a dynamic Web service to simplify code

