.NET动态调用WebService
这不是一篇教你了解WebService的博文,也不是对WebService的深入理解,这是一篇教你在开发过程中,如果动态的调用WebService一个方法. 在比较常见的WebService调用,我们一般是选择在项目中,新建添加引用的方式来引用WebService服务. 例如下面的方式 ?:?1 : 在项目中新建添加服务引用 ? 2 : 输入引用服务器的地址 然后我们的程序集下就会多出刚才新建的Service 引用相关的文件引用. 然后我们就可以直接在代码中调用ServiceReference1,就可以了,在这里就不在继续的详细做解释说明了,我们还是回到主题,如何减去这些步骤,因为这样的方式添加引用,1 : 不好扩展,2 : 比较繁琐? 下面介绍一种方式用来动态的调用WebService References :一 : 在项目中右键选择新建 然后我们修改Component类本部. 我们添加完成之后,Component类内部默认为: ??public?partial?class?Component1?:?Component ????{ ????????public?Component1() ????????{ ????????????InitializeComponent(); ????????} ????????public?Component1(IContainer?container) ????????{ ????????????container?.Add(this?); ????????????InitializeComponent(); ????????} ????} 在此我们需要做一些修改. 首先在项目中添加WebService的引用.
? 然后将Component类 继承自?SoapHttpClientProtocol 至此将Component类改为 : ?[?WebServiceBinding?(Namespace?=?"http://tempuri.org/"?)] ????public?partial?class?Component1?:?SoapHttpClientProtocol ????{ ????????public?Component1() ????????{ ????????????InitializeComponent(); ????????} ????????public?Component1(IContainer?container) ????????{ ????????????container?.?Add(this?); ????????????InitializeComponent(); ????????} ????}
然后在配置文件中写入我们所要引用的服务器链接地址 : <add?key="ServiceAddress"?value="http://localhost:7340/CourseMakerService.asmx"?/> 在我们添加的Conponent Class 构造中调用服务器链接地址 ??public?Component1(?string?serviceUrl) ????????{ ????????????if?(serviceUrl.?Equals(?"UpdateServiceAddress"?)) ????????????????base?.Url?=?ConfigurationManager?.?AppSettings["UpdateServiceAddress"?]; ????????????else ????????????????base?.Url?=?ConfigurationManager?.?AppSettings["ServiceAddress"?]; ????????} 然后当我们想要调用WebService中的方法时,只需要在Component1类中写.? 如我的调用方式 :? [?WebServiceBinding(Namespace?=?"http://tempuri.org/"?)] ????public?class?OffLineLearingClient?:?SoapHttpClientProtocol ????{ ????????public?OffLineLearingClient(?string?serviceUrl) ????????{ ????????????if?(serviceUrl.?Equals(?"UpdateServiceAddress"?)) ????????????????base?.Url?=?ConfigurationManager?.?AppSettings["UpdateServiceAddress"?]; ????????????else ????????????????base?.Url?=?ConfigurationManager?.?AppSettings["ServiceAddress"?]; ????????} ????????public?OffLineLearingClient() ????????{ ????????????base?.Url?=?ConfigurationManager?.?AppSettings["ServiceAddress"?]; ????????} ????????[?SoapDocumentMethod?] ????????public?YHBJUser?GetUser(?YHBJUser?user) ????????{ ????????????return?base?.?Invoke("GetUser"?,?new?object?[]?{?user?})[0?]?as?YHBJUser?; ????????} ????????[?SoapDocumentMethod?] ????????public?List?<?YHBJClass>?GetTrainings11(?string?userId) ????????{ ????????????return?base?.?Invoke("GetTrainings11"?,?new?object?[]?{?userId?})[0?]?as?List?<YHBJClass?>?; ????????} 这样我们就可以动态的实现如果调用WebService了. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |