客戶端調用 WCF 的幾種方式

轉載網絡代碼.版權歸原作者所有.....

客戶端調用WCF的幾種常用的方式:1普通調用
var factory = new DataContent.ServiceReference1.CustomerServiceClient();factory.Open();List<DataContent.ServiceReference1.Customer> lis = factory.GetAllCustomerList();factory.Close();2 異步調用 1??var?factory?=?new?DataContent.ServiceReference1.CustomerServiceClient();IAsyncResult?anynRsult?=?factory.BeginGetAllCustomerList(null,?null);List<DataContent.ServiceReference1.Customer>?lis?=?factory.EndGetAllCustomerList(anynRsult);factory.Close();
該方法將會阻塞當前線程并等待異步方法的結束,往往不能起到地多線程并發執行應有的作用。我們真正希望的是在異步執行結束后自動回調設定的操作,這樣就可以采用回調的方式來實現這樣的機制了。

在下面的代碼中,我們通過一個匿名方法的形式定義回調操作,由于在回調操用中輸出運算結果時需要使用到參與運算的操作數,我們通過BeginGetAllCustomerList方法的最后一個object類型參數實現向回調操作傳遞數據,在回調操作中通過IAsyncResult對象的AsyncState獲得。


??????????2??var?factory?=?new?DataContent.ServiceReference1.CustomerServiceClient();factory.BeginGetAllCustomerList(delegate(IAsyncResult?asyncResult){lis?=?factory.EndGetAllCustomerList(asyncResult);factory.Close();},?null);
???? 3通信工廠 
???   var?factory?=?new?ChannelFactory<DataContent.ServiceReference1.ICustomerService>(new?BasicHttpBinding(),?new?EndpointAddress("http://localhost:10625/Service1.svc"));try{var?proxy?=?factory.CreateChannel();using?(proxy?as?IDisposable){return?proxy.GetAllCustomerList();}}catch?(Exception?ex){Console.WriteLine(ex.Message);return?new?List<DataContent.ServiceReference1.Customer>();}finally{factory.Close();}
4 通過事件注冊的方式進行異步服務調用
?var?factory?=?new?DataContent.ServiceReference1.CustomerServiceClient();factory.GetAllCustomerListCompleted?+=?(sender,?e)?=>{lis?=?e.Result;};factory.GetAllCustomerListAsync();factory.Close();

?

在這里做個備注:防止下次忘記

?

轉載于:https://www.cnblogs.com/w2011/p/3181946.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/448122.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/448122.shtml
英文地址,請注明出處:http://en.pswp.cn/news/448122.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

VUE:組件間相互跳轉、頁面帶參跳轉

前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 只是記錄下用法&#xff1a; 從 A 頁面跳轉到 B 頁面。 如下寫法&#xff1a; A 頁面跳轉方式&#xff1a; 代碼&#xff1a; getdat…

Protocol Buffer 序列化

Protobuf使用 目錄 proto3的更新定義協議格式編譯protobufprotobuf_API 枚舉和嵌套類標準消息方法解析和序列化 寫一條消息閱讀消息編譯Protobuf擴展優化高級用法 proto3的更新 在第一行非空白非注釋行&#xff0c;必須寫&#xff1a; syntax "proto3";字段規…

如何調整反光鏡和座椅的位置 為您支招

【太平洋汽車網 學車頻道】首先要進行座椅的高度調整&#xff0c;上下調整座椅讓頭部離車頂至少還有一拳的距離。如果座椅調得太高&#xff0c;車輛在顛簸時頭部容易碰到車頂&#xff0c;調得太矮了又會影響視線。然后是前后距離的調整&#xff0c;當腳踩住制動踏板至最深處時…

關于hexo與github使用過程中的問題與筆記

快速閱讀 如何用github 和hexo 創建一個blog 1.github中要新建一個與用戶名同一樣的倉庫&#xff0c; 如:homehe.github.io - 必須是io后綴。一個帳戶 只能建立一個2. 綁定域名 &#xff0c; A記錄指向ip, cname記錄指向homehe.github.io 3. 配置sshkey - 個人設置 -> SSH a…

CSS 中 的 margin、border、padding 區別 (內邊距、外邊距)

前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 圖解CSS padding、margin、border屬性 W3C組織建議把所有網頁上的對像都放在一個盒(box)中&#xff0c;設計師可以通過創建定義來控制這…

CMake 常用的預定義變量

CMake 常用的預定義變量 PROJECT_NAME : 通過 project() 指定項目名稱 PROJECT_SOURCE_DIR : 工程的根目錄 PROJECT_BINARY_DIR : 執行 cmake 命令的目錄 CMAKE_CURRENT_SOURCE_DIR : 當前 CMakeList.txt 文件所在的目錄 CMAKE_CURRENT_BINARY_DIR : 編譯目錄&#xff0c;…

什么是轉向燈?使用轉向燈有何技巧?

什么是轉向燈&#xff1f;如何使用轉向燈&#xff1f;新手司機對車輛還不是很熟悉&#xff0c;如何正確使用轉向燈&#xff0c;尤其是在不同路段中該怎么正確使用轉向燈&#xff0c;成為了很多新手們的困擾之一&#xff0c;今天我們就來為大家解決這個問題吧&#xff01; 轉向燈…

基于Flask開發企業級REST API應用(一)

關于我 編程界的一名小小程序猿&#xff0c;目前在一個創業團隊任team lead&#xff0c;技術棧涉及Android、Python、Java和Go&#xff0c;這個也是我們團隊的主要技術棧。 Github&#xff1a;github.com/hylinux1024 微信公眾號&#xff1a;angrycode 前面對Python WEB框架Fla…

解決:Do not use built-in or reserved HTML elements as component id: form

前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 1. vue 新寫了個組件&#xff0c;運行工程成功&#xff0c;但界面沒有出效果&#xff0c;F12 提示有一個警告&#xff1a; Do not use …

移動語義,右值引用

移動語義 目錄 右值引用變量是左值move庫函數移動構造函數和移動賦值移動操作庫容器和異常移動賦值操作符移動后的對象必須是可以析構的合成移動操作右值移動左值拷貝右值在無法被移動時進行拷貝拷貝和交換賦值操作與移動移動迭代器右值引用和成員函數右值與左值引用的成員函…

集合練習:登錄注冊功能

需求&#xff1a; 1、登錄賬號唯一&#xff0c;在注冊時驗證輸入的賬號是否可用&#xff0c;若已存在&#xff0c;則不可用&#xff0c;若不存在則可用2、登錄時使用賬號密碼進行驗證1 /**2 * author Administrator3 * 登錄信息 4 */5 public class UserLogin {6 …

vue 通信、傳值的多種方式(超詳細)

前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 一、通過路由帶參數進行傳值 ①兩個組件 A和B,A組件通過query把orderId傳遞給B組件&#xff08;觸發事件可以是點擊事件、鉤子函數等&am…

新手開車 駕駛小秘訣要牢記

有很多人剛買到新車興奮異常&#xff0c;憑著并不熟練的駕駛技術&#xff0c;過了幾天的車癮后發現&#xff0c;剛買的車怎么出現了這樣那樣的問題 有很多人剛買到新車興奮異常&#xff0c;憑著并不熟練的駕駛技術&#xff0c;過了幾天的車癮后發現&#xff0c;剛買的車怎么出現…

chrome中Google插件導出導入

導出插件&#xff1a; 一般電腦默認將你安裝的插件存放的位置在&#xff1a;C:\Users&#xff08;用戶&#xff09;\你的電腦名稱\AppData\Local\Google\Chrome\User Data\Default\Extensions 這個文件夾下。這里的 AppData 是個隱藏文件夾&#xff0c;需要顯示隱藏文件夾才行…

科目三電子路考操作流程

如果你已經通過科目二場內五項考試&#xff0c;正準備參加科目三電子路考的話&#xff0c;不妨看看由邕江駕校李師傅操作講解的電子路考考試流程演示視頻&#xff0c;每項都有詳細介紹操作要領及評判標準哦。 科目三考試項目&#xff1a;上車準備、起步、路口左轉彎、通過學校區…

vue Bus 總線 組件間通信

前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 有時候兩個組件也需要通信&#xff08;非父子關系&#xff09;。當然Vue2.0提供了Vuex&#xff0c;但在簡單的場景下&#xff0c;可以使…

C++沒有調用析構函數

github地址 在項目中遇到一個問題&#xff0c;析構函數沒有調用產生了內存泄露。 具體見valgrind檢測libevent內存泄露 我們看兩個例子 demo1 class Test1; void del(Test1* obj){delete obj; } class Test1{ public:Test1(){printf("Test1\r\n");}~Test1(){pri…

實際操作之路考的這些事

辛苦了這么久練習路考&#xff0c;今天終于實際操作到我路考了。上車以后。關上車門。把考試的單地上給考官。還沒有認真的去看考官一眼。于是就聽到考官用低沉的聲音對我說&#xff1a;你好&#xff01;當時就感覺有一點意外。沒想到考官你這么有禮貌。然后我就沒那么緊張了&a…

[C# 網絡編程系列]專題十二:實現一個簡單的FTP服務器

引言&#xff1a; 休息一個國慶節后好久沒有更新文章了&#xff0c;主要是剛開始休息完心態還沒有調整過來的&#xff0c; 現在差不多進入狀態了&#xff0c; 所以繼續和大家分享下網絡編程的知識&#xff0c;在本專題中將和大家分享如何自己實現一個簡單的FTP服務器。在我們平…

vue 2 使用 Bus.js 實現兄弟 (非父子) 組件通信 簡單案例

前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 vue2中廢棄了$dispatch和$broadcast廣播和分發事件的方法。父子組件中可以用props和$emit()。如何實現非父子組件間的通信&#xff0c;可…