.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.pswp.cn/news/376179.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/376179.shtml
英文地址,請注明出處:http://en.pswp.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;它的特點是可以通過上下箭頭微調選擇&#…