.net 代理类(WebService代理类的详解 )

http://hi.baidu.com/654085966/item/53ee8c0f108ad78202ce1b1d   -----------转自

客户端调用Web Service的方式我现在知道的有三种,分别为Http_Get,Http_Post和通过代理类来调用
直接通过HTTP-GET和直接通过HTTP-POST来请求访问Web服务是非常底层的且麻烦,(详细用法请查看C#分类中的说明),还有一种就是通过代理类来访问,DoNet框架提供的WSDL.EXE可以产生要求的代理类.在.net命令里输入wsdl http//url/xxx.asmx /language:cs /out:xxx.ss /protocol:httpGet即可生成HttpGet的代理类

首先我将列出WebService的原代码:using System;
using System.Collections;
using System.ComponentModel;
using System.Data;
using System.Diagnostics;
using System.Web;
using System.Web.Services;
using System.Data.SqlClient;namespace Play.CH1
{
public class Service1 : System.Web.Services.WebService
{public Service1(){InitializeComponent();}private System.Data.SqlClient.SqlConnection sqlConnection1;private IContainer components = null;private void InitializeComponent(){this.sqlConnection1 = new System.Data.SqlClient.SqlConnection();this.sqlConnection1.ConnectionString = "workstation id=\"192.168.1.9\";packet size=4096;user id=sa;data source=\"192.168.1.9\";pe" +"rsist security info=True;initial catalog=pubs;password=";this.sqlConnection1.InfoMessage += new System.Data.SqlClient.SqlInfoMessageEventHandler(this.sqlConnection1_InfoMessage);}protected override void Dispose( bool disposing ){if(disposing && components != null){components.Dispose();}base.Dispose(disposing);  }private void sqlConnection1_InfoMessage(object sender, System.Data.SqlClient.SqlInfoMessageEventArgs e){}[WebMethod]public string doSearch(string keyword){SqlDataAdapter da = new SqlDataAdapter("select top 20 title_id,title from titles where title like @title",sqlConnection1);da.SelectCommand.Parameters.Add(new SqlParameter("@title","%"+keyword+"%"));DataSet ds=new DataSet();da.Fill(ds);return ds.GetXml();}}
}再贴出刚生所生成的代理类的原代码
//------------------------------------------------------------------------------
// <autogenerated>
//     This code was generated by a tool.
//     Runtime Version: 1.1.4322.573
//
//     Changes to this file may cause incorrect behavior and will be lost if 
//     the code is regenerated.
// </autogenerated>
//------------------------------------------------------------------------------// 
// 這個原始程式碼是由 wsdl,Version=1.1.4322.573 自動產生。
// 
using System.Diagnostics;
using System.Xml.Serialization;
using System;
using System.Web.Services.Protocols;
using System.ComponentModel;
using System.Web.Services;/// <remarks/>
[System.Diagnostics.DebuggerStepThroughAttribute()]
[System.ComponentModel.DesignerCategoryAttribute("code")]
public class Service1 : System.Web.Services.Protocols.HttpGetClientProtocol {public Service1() {this.Url = "http://localhost/Play/CH1/Service1.asmx";}[System.Web.Services.Protocols.HttpMethodAttribute(typeof(System.Web.Services.Protocols.XmlReturnReader), typeof(System.Web.Services.Protocols.UrlParameterWriter))][return: System.Xml.Serialization.XmlRootAttribute("string", Namespace="http://tempuri.org/", IsNullable=true)]public string doSearch(string keyword) {return ((string)(this.Invoke("doSearch", (this.Url + "/doSearch"), new object[] {keyword})));}public System.IAsyncResult BegindoSearch(string keyword, System.AsyncCallback callback, object asyncState) {return this.BeginInvoke("doSearch", (this.Url + "/doSearch"), new object[] {keyword}, callback, asyncState);}public string EnddoSearch(System.IAsyncResult asyncResult) {return ((string)(this.EndInvoke(asyncResult)));}
}再来对代理类进行详细说明1. 代理类开始是引出一系列的命名空间,代码的主题是定义一个跟待访问的Web服务类同名的 从System.Web.Services.Protocols.HttpGetClientProtocol派生的代理类
2. 代理类具有如下四个方法
2.1 不带参数的构造函数
构造函数主要是设定代理类的URL属性,这个属性表示WEB服务的URL.
2.2 doSearch方法
该方法是WEB服务的doSearch方法的本地代理版本,该方法被一个HttpMethodAttribute所标注,其目的是指示如何序列化发送到WEB服务的doSearch方法的参数以及如何反序列化WEB服务的响应.如果采用HTTP-GET调用WEB服务的方法,则必须把HTTPMothodAttribute的ReturnFormatter属性设置为XmlReturnReader,ParameterFormatter属性设置为UrlParameterWriter.方法的返回值也被一个XmlRootAttribute特性所标记.该特性用以将类,结构,枚举或结口标记为XML文档实例的根(或项级)元素.该特性的ElementName属性表示返回值对应的XML元素的名称,Namespace属性表示XML根元素的命名空间,IsNullable属性表示返回值为空时ElementName所指的无素是否包xsi:nil属性.
以上特性其实代替了我在C#分类中所讲的利用HTTP-GGET;HTTP-POST来获得WEB服务中的设置URL,在URL中附中参数,以及从返回XML文档中提结果的大段代码
再来看看方法中的代码
return ((string)(this.Invoke("doSearch", (this.Url + "/doSearch"), new object[] { keyword})));
上述代码先调用一个Invoke方法,(该方法继承自父类HttpGetClientProtocol),然后把调用结果强制转化为字符串类型.
Invoke方法的原型:
protected Object Invoke(string MethodName,string RequestUrl,Object[] Parameters);
参数:MethodName->表示要调用的Web服务的名称,本例中的“doSearch“
参数:RequestUrl->表示WEB服务的方法的URL,它是由WEB服务的URL加上"/方法名"组成
参数:Parameters->是一个对象数组,包含要传递到远程WEB服务的参数,数组中的顺序与派生类的调用方法中的参数顺序对应
返回值包含派生类方法的返回值和所有引用或输出参数的对象数组
2.3 BegindoSearch方法
这个方法用以启动对WEB服务的doSearch方法的异步调用
BegindoSearch的参数:keyword:     参数.callback:      AsyncCallback类型的委托对象,当异步调用结束后,callback所代表的函数将被回调,用来接收结果.AsyncCallback委托原型:[Serializable]public delegate void AsyncCallback(IAsyncResult ar);其: IAsyncResult接口:用于监视和管理异步操作.IAsyncResult接口的原型public interface IAsyncResult{object AsyncState{get;}//返回被作为最后一个参数提供的对象WaitHandle AsyncWaitHandle{get;}//返回WaitHandle,它可用于执行WaitHandle.WaitOne,WaitAny,WaitAll,以实现同步bool CompletedSynchronously{get;}//如果开始操作同步完成,则CompletedSynchronously=truebool IsCompleted{get;}//在服务器完成调用处理后IsCompleted=true
                         }2.4 EnddoSearch方法
这个方法用以结束异步调用,并获得调用结果

 

转载于:https://www.cnblogs.com/anbylau2130/p/3481857.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/376179.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

icem密度盒怎么设置_怎么做好火灾自动报警系统施工安装?

关于火灾自动报警系统施工安装GB50166-2019 《火灾自动报警系统施工及验收标准》 中有明确规定&#xff1a;3.1 一般规定3.1.1 系统部件的设置应符合设计文件和现行国家标准《火灾自动报警系统设计规范》GB50116的规定。3.1.2 有爆炸危险性的场所&#xff0c;系统的布线和部件的…

Android 广播机制以及用法详解 (转)

转&#xff1a;http://blog.sina.com.cn/s/blog_5da93c8f010178zl.html 参考&#xff1a;http://blog.sina.com.cn/s/blog_80723de801014e2g.htmlhttp://blog.csdn.net/jjaze3344/article/details/7259272一、什么是广播&#xff1f;在android里面有各种各样的广播&#xff0c;…

erlzmq

ERROR REPORT 24-Dec-2013::17:01:43 The on_load function for module erlzmq_nif returned {error, {load_failed, "Failed to load NIF library: ./ebin/../priv/erlzmq_drv.so: ELF file OS ABI invalid"}} 发布到不同环境的服务器时报上面的错误&#xff0c;解决…

python岗位 上海_上海黑马Python24期,平均薪资10150元,16个工作日就业率70.73%

黑马程序员上海中心月薪一万只是起点关注网红遍地起&#xff0c;颜值即正义&#xff0c;要说哪个网红靠实力&#xff0c;Python当属第一&#xff01;Python作为时下最流行的一门网红语言&#xff0c;用一句话来证明它的实力就是&#xff1a;Python在手&#xff0c;天下我有&…

在IIS中部署Asp.net Mvc

概述&#xff1a; 最近在做一个MVC 3的项目&#xff0c;在部署服务器时破费了一番功夫&#xff0c;特将过程整理下来&#xff0c;希望可以帮到大家&#xff01; 本文主要介绍在IIS5.1、IIS6.0、IIS7.5中安装配置MVC 3的具体办法&#xff01; 正文&#xff1a; IIS5.1 1. 安装Mi…

idea在分屏拖不回来_朋友圈赏花晒照新玩法,宫格分屏视频!

∆ 点击上方【有科唠】一起涨姿势~近期的天气好的不要不要的&#xff0c;出去赏花是件很惬意的事情&#xff0c;继《城墙下》推出的近期赏花攻略&#xff0c;唠科粉们可以跟着攻略赏花一番&#xff0c;赏花的同时&#xff0c;大家肯定会发个朋友圈纪念一下&#xff0c;见过九宫…

MFC窗口实现最小化到托盘 右键菜单和还原

//.h文件 void toTray();//最小化到托盘 void DeleteTray();//删除托盘图标afx_msg LRESULT OnShowTask(WPARAM wParam,LPARAM lParam) ;//图标恢复//.cpp文件#define WM_SHOWTASK (WM_USER 1) #define IDR_SHOW 11 #define IDR_OTHER 12 #define IDR_EXIT 13 BEGIN_MESSAGE_MA…

Owner Useful links

1、AS3天地会论坛 http://bbs.9ria.com/forum.php 2、Cocoa China中文网 http://www.cocoachina.com/ 3、IT江湖 http://www.itjhwd.com/ 4、The Swift Programming Language in github https://github.com/numbbbbb/the-swift-programming-language-in-chinese 5、Xcode 工具 …

导出配置_Lua配置表导出优化

随着游戏的开发&#xff0c;项目的配置表数据越来越多&#xff0c;占用的内存越来越&#xff1b;配置表占用太大就会影响游戏加载速度&#xff0c;游戏流畅度的每一毫秒都是我们的必争之路。[1] {DungeonID10000, Dungeon "王进打高俅", NextDungeonID10100, Battle…

iOS数据存取---iOS-Apple苹果官方文档翻译

本系列所有文章,链接地址:iOS7开发-Apple苹果iPhone开发Xcode官方文档翻译PDF下载地址(2013年12月29日更新版) 本文对应pdf文档下载链接,猛戳—>:数据存取文档.key.zip3.1 MB数据存取文档.pdf1.1 MB 数据存取/*技术博客http://www.cnblogs.com/ChenYilong/ 新浪微博http://w…

企业QQ 增加在线交谈链接

企业QQ的在线交流链接跟普通QQ的在线交流不一样&#xff0c;普通QQ的在线交流&#xff0c;可以在http://shang.qq.com/v3/widget.html生成&#xff1b;企业qq的链接可以按以下步骤添加&#xff1a;第一步&#xff1a;引入企业QQjs脚本&#xff1a;<script charset"utf-…

为什么打不开_发票查重百科导出的发票台账为什么附件打不开?

1在扫描完发票之后&#xff0c;很多人都习惯性的定期将扫描的电子发票台账导出来&#xff0c;目前电子发票查重工具小程序版提供了两种导出方式&#xff1a;通过邮件的方式将指定日期内的发票台账直接发送到指定的邮箱&#xff1b;直接将指定日期内的发票台账下载到手机上进行查…

无法找到脚本文件 C:/Windows/explorer.exe:574323188.vbs

今天打开电脑后电脑有点反常&#xff0c;在启动时没有运行 “局域网” 保护的程序&#xff0c;而且还他是 “无法找到脚本文件”如下图&#xff1a; 发现这个东西后&#xff0c;第一反应&#xff0c;拔掉网线、因为很有可能是中病毒了&#xff0c;当时就出了一身冷汗&#xff0…

【转】成功的程序员

我算是靠坑蒙拐骗进了程序员的门&#xff0c;然后一路狂奔。26 岁之前几乎没有任何写代码的经验&#xff0c;研究生毕业却意外选择了一家不可能提供培训的初创公司&#xff0c;在每日担忧公司倒闭、害怕被炒鱿鱼以及同事冷落白眼的三重压力下逆流而上&#xff0c;一年半后离职&…

requests 分类多级页面_scrapy框架爬取多级页面

spides.py# -*- coding: utf-8 -*-import scrapyfrom weather.items import WeatherItemfrom scrapy.crawler import CrawlerProcessimport re多级分类爬取class IgxSpider(scrapy.Spider):name igx_resultallowed_domains [www.igxpt.com]# start_urls [http://www.igxpt.c…

T-SQL:SQL Server-数据库查询语句基本查询

ylbtech-SQL Server-Basic:SQL Server-数据库查询语句基本查询SQL Server 数据库查询语句基本查询。 1&#xff0c;数据库查询语句基本查询数据库SQL ServerOracle基本语句 select select * from titles select title_id,title,price,pub_id from titles select * from title …

C:打印菱形(自己的方法)

//-------------------&#xff0a;打印菱形&#xff0a;--------------------- int i,j,k; int n; printf("请输入一个奇数n&#xff1a;"); scanf("%d",&n); for (i0; i<n/2; i) { for (j0; j<n/2-i; j) { printf(" "); } for (k0; …

修改无效_修改劳动合同日期被认定无效,青岛一企业被判赔双倍工资

劳动合同法规定&#xff0c;用人单位超过一个月不满一年未与劳动者订立书面劳动合同的&#xff0c;应当向劳动者每月支付二倍的工资。在现实中&#xff0c;经常遇到的情况是续签合同时&#xff0c;已经到期的劳动合同与新合同之间的空档期&#xff0c;如果管理混乱或者遇到特殊…

HDUOJ-----2065红色病毒问题

"红色病毒"问题 Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 3339 Accepted Submission(s): 1422 Problem Description医学界发现的新病毒因其蔓延速度和Internet上传播的"红色病毒"不相…

下拉框_jQuery 美化界面的下拉框

插件简介之前我们介绍过一款基于jQuery多级联动美化版Select下拉框&#xff0c;很多朋友都非常喜欢&#xff0c;可见经过美化过的下拉框的确可以让你的网页更为精妙。今天我们要介绍的这款美化界面下拉框也是基于jQuery的&#xff0c;它的特点是可以通过上下箭头微调选择&#…