Browse by Tags

WCF探勘15-DataContract與DataMember
學藝不精,陸續踩了幾次雷,整理DataContract與DataMember對序列化的影響備忘。 WCF預設使用 DataContractSerializer 執行序列化,而DataContractSerializer可依物件類別標註的[DataContract]及[DataMember]、[IgnoreDataMember]等Attribute決定哪些屬性該序列化。依照MSDN文件,DataContractSerializer的處理原則為: 類別標示[DataContract]時,只序列化有標示...
Posted 26 October 2015 07:24 AMJeffrey | 2 comment(s) 4,226
Filed under:
WCF探勘14-使用By Reference傳遞參數
同事回報一起案例,某WCF服務的[OperationContract]方法宣告為void Blah(ref int i, ref string s),以傳址方式(By Reference)傳遞參數(延伸閱讀: Self Test - Value Type vs Reference Type ),程式運作多時,詢問我-WCF可以使用 ref 傳參數嗎? 一隻 黑天鵝 默默在我面前飛過,看得我瞠目結舌… 令人訝異之處在於,依我的理解WCF的Client/Server身處不同程序(Process),不管輸入參數還是傳回結果...
Posted 06 October 2015 06:13 AMJeffrey | 1 comment(s) 3,504
Filed under:
WCF探勘13-支援WebSocket的NetHttpBinding
探討 WCF雙工服務 時發現WsDualHttpBinding不實用(Server會回頭連Client的80 Port)、NetTcpBinding難穿防火牆,二者均難應用於Internet,有實作Polling的Silverlight版Binding又無法用於其他程式,查了資料,才發現.NET 4.5+增加了一個神奇的 NetHttpBinding ,支援WebSocket! 為什麼在研究 預設Binding 時會沒看到它?難道是我人呆眼瞎?重看.NET 4.5的 Configuring System...
Posted 18 September 2015 06:33 AMJeffrey | 5 comment(s) 4,574
Filed under:
WCF探勘12-WsDualHttpBinding的祕密
在 前篇文章 試寫了WCF雙工服務,由於WsHttpBinding不支援雙工,故我們改用WsDaulHttpBinding及NetTcpBinding,分別用HTTP及TCP協定傳送資料。問題來了,大家都知道HTTP是單向的,Client端連上Server,每次送Request收Response後就銀貨兩訖,WCF服務端要如何主動呼叫Client端,難道要像SignalR一樣,使出Long Polling之類的奇技淫巧達成任務?答案是,不!Server得回頭開一條HTTP連線到Client端傳送Callback...
Posted 15 September 2015 09:22 AMJeffrey | 1 comment(s) 3,413
Filed under:
WCF探勘11-雙工服務(Duplex Services)
除了從Client呼叫WCF服務取得結果,WCF也支援Server端反過來呼叫寫在Client端的方法(類似事件觸發概念),這種雙工(Duplex)模式算是WCF的一大賣點。Web API要實現類似概念得靠SignalR架構支援,直接內建雙工模式的WCF略勝一籌。 這篇文章,我們就來建立一個簡單的WCF雙工服務,實際體驗它的威力。 假設我們有一個ITimer報時服務,構想是在WCF Server跑一個PerSession Instance(關於InstanceContextMode.PerSession的意義請參考...
Posted 12 September 2015 11:58 AMJeffrey | with no comments 3,299
Filed under:
WCF探勘10-InstanceContextMode與ConcurrencyMode
跟ASP.NET WebForm或MVC Controller一樣,WCF在接收Client的呼叫時,Server端必須建立一個Service型別的Instacne(執行個體)執行作業。在WebForm或MVC Controller裡,多採行「為每次Request建立Instance,處理完畢就抛棄」的策略,這與HTTP協定的無狀態(Stateless)特性有關。WCF Service因支援雙向呼叫等應用模型,故WCF Service Instance的生命週期管理比一般ASP.NET網頁複雜。...
Posted 11 September 2015 06:45 AMJeffrey | with no comments 3,129
Filed under:
WCF探勘9-Protobuf-Net序列化資料量觀察
前篇文章 介紹完如何用protobuf-net取代WCF原本的XML及NMF序列化,來看看它在資料減量上的表現。 NetTcpBinding 首先登場的是NetTcpBinding改用protobuf-net後的封包分析,黃底部分為WCF Server回傳結果的封包: 資紏統計如下(第二欄來自先前測試NetTcpBinding的 數據 ,第三欄為NetTcpBinding改用protobuf-net後的結果) 64-256筆結果時,資料量減少約28%。 BasicHttpBinding(啟用IIS動態壓縮...
Posted 10 September 2015 06:40 AMJeffrey | with no comments 2,166
Filed under:
WCF探勘8-使用Protobuf-Net序列化
Protocol Buffers 是Google內部使用的跨語言資料格式標準,在資料體積及序列化/反序列化速度上表現亮眼,相信以下的Benchmark圖表已具備足夠的說服力,說明本文的研究動機:(Protocol Buffers拿下速度及資料量雙料冠軍) 圖表來源: http://theburningmonk.com/2014/08/json-serializers-benchmarks-updated-2/ protobuf-net 是Protobol Buffers的.NET版實作,只需簡單的程序...
Posted 09 September 2015 08:12 AMJeffrey | 2 comment(s) 4,934
Filed under:
WCF探勘7-XML序列化資料量觀察
早先我們觀察過WCF HTTP vs TCP的傳輸量差異 ,該測試呼叫GetData()作業傳入數字接回字串,並不算真的用到WCF的DataContract/DataMember序列化功能,故這次改聚焦在物件資料的序列化上,再做一次比較。 我小幅改寫Visual Studio WCF專案範本的CompositeType,增加一個IntValue。 [DataContract] public class CompositeType { bool boolValue = true ; string stringValue...
Posted 08 September 2015 06:29 AMJeffrey | with no comments 2,573
Filed under:
WCF探勘6-OperationContract(IsOneWay=true)的用途
在範例程式看到OperationContract(IsOneWay=true),不求甚解以為是指單向呼叫(傳回值是void)跟著亂抄亂用(錯誤示範,大家不要學),搞出一些奇怪現象才回頭查,發現觀念錯得離譜。 IsOneWay是用來定義 單向合約 沒錯,但重點在「 呼叫端呼叫WCF作業,但不期待收到任何回應 」,其真正意義更傾向「Fire and Forget」(射後不理)。因此,指定OperationContract(IsOneWay=true)的方法傳回值應為void,最重要的差別在於呼叫該方法後...
Posted 07 September 2015 07:35 AMJeffrey | with no comments 5,055
Filed under:
WCF探勘5-預設Binding介紹
前面的文章出現過BasicHttpBinding、NetTcpBinding,又提到「BasicHttpBinding接受匿名存取,NetTcpBinding需要認證」的預設行為,後續還會看到一堆BlahBlahBinding,這裡花點時間做個簡單介紹。 BasicHttpBinding、NetTcpBinding這些都是WCF內建預設定義好的服務設定組合,裡面已定義好通訊協定、安全等級、Session支援、Transaction、雙工(Duplex)支援等特性,當然,不足時WCF也允許開發者自己定義特殊組合...
Posted 06 September 2015 10:13 AMJeffrey | 2 comment(s) 3,526
Filed under:
WCF探勘4-HTTP與TCP傳輸量比較
稍早 我們見識到net.tcp不容易偵錯的黑暗面,但net.tcp的好處在於通訊協定簡單,較HTTP簡潔輕巧,資料採二進位格式,體積比SOAP XML小。由於資料傳輸較少,預期會有較好的執行效能。但以上所說都是按理推想,我對二者資料傳輸量的真實差異感到好奇,便用Microsoft Network Monitor幫它們做了一次斷層掃瞄,分享給對二者差異有興趣的朋友。 沿用 先前的範例 ,在WCF Client端做一點修改: 程式透過HTTP及TCP各呼叫一次GetData(0),程式執行同時開啟MNM側錄網路封包...
Posted 05 September 2015 05:55 AMJeffrey | 3 comment(s) 4,948
Filed under:
WCF探勘3-WCF設定檔編輯器
WCF設定的繁瑣難搞向來惡名昭彰,這回重新評估WCF,意外發現浪子回頭的一絲曙光 XD Visual Studio 2012起默默在設定檔的右鍵選單增加了「Edit WCF Configuration」選項: 嘩!有GUI的WCF設定編輯器耶~(正式名稱為Microsoft Service Configuration Editor) 如上圖所示,Services/WcfWas.Service1下的兩個Endpoint對照到我們web.config(請參考下圖)裡的兩個endpoint設定,而BindingConfiguration屬性提供下拉選單可選取定義好的NoneSecurityNetTcpBinding...
Posted 04 September 2015 08:03 AMJeffrey | with no comments 2,919
Filed under:
WCF探勘2-跨機器執行net.tcp
本機測試完畢,準備將WCF部署到VM進行更多觀察,才誇WCF 4設定精簡,馬上踩到小圖釘。 沿續 前文 範例,將WcfWas部署到一台Windows 2012R2上,比照本機操作安裝「TCP啟用」設定IIS使用「http,net.tcp」協定,執行WCFClient程式,HTTP傳輸OK,執行net.tcp時產生「伺服器已經拒絕用戶端認證」錯誤。(英文:The server has rejected the client credentials) 爬文得知net.tcp預設連線時需完成身分驗證,不想跟驗證關卡糾纏...
Posted 03 September 2015 08:08 PMJeffrey | with no comments 3,823
Filed under:
WCF探勘1-WAS與net.tcp
前陣子對.NET Remoting、WCF、Web API做了 評估 ,重新肯定WCF在Client/Server皆為.NET情境下的優越性,決定展開一系列對WCF較深入的研究,重新評估這個被我嫌棄多年的技術。 我深信「開發者擁有選擇或棄用某項技術的決定權,但必須基於理性分析評估優劣,而非單憑模糊印象或靠某種說不上來的感覺」。為此,雖然過去對WCF繁瑣易錯的設定方式從未有過好感,還是該咬牙征服它,才有資格大聲說「我決定不用WCF,是因為Blah Blah…」 但歷經一番研究,發現WCF在.NET...
Posted 02 September 2015 11:09 PMJeffrey | with no comments 5,444
Filed under:
更多文章 下一頁 »

搜尋

Go

<June 2017>
SunMonTueWedThuFriSat
28293031123
45678910
11121314151617
18192021222324
2526272829301
2345678
 
RSS
創用 CC 授權條款
【廣告】
twMVC
最新回應

Tags 分類檢視
關於作者

一個醉心技術又酷愛分享的Coding魔人,十年的IT職場生涯,寫過系統、管過專案, 也帶過團隊,最後還是無怨無悔地選擇了技術鑽研這條路,近年來則以做一個"有為的中年人"自許。

文章典藏
其他功能

這個部落格


Syndication