當前位置:首頁 » 密碼管理 » wcf數據加密

wcf數據加密

發布時間: 2023-02-07 02:08:40

⑴ WCF全面解析的前言

「全書之寫印,實系初稿。有時公私瑣務蝟集,每寫一句,三擱其筆;有時興會淋漓,走筆疾書,絮絮不休;有時意趣蕭索,執筆木坐,草草而止。每寫一段,自助覆閱,輒搖其首,覺有大不妥者,即貼補重書,故剪刀漿糊乃不離左右。個中甘苦,只自知之。」
在某個陽光明媚的早晨,我在去上班的公交車上翻看岳南先生的《南渡北歸》的時候,看到上面這段董作賓描述自己寫作《殷歷譜》之甘苦的文字,回想起我寫作這本書的經歷,不禁感慨萬千。我無意將《WCF全面解析》自比煌煌巨著《殷歷譜》,只是覺得人同此心,這段文字正好描述我寫作此書的狀態。
《WCF技術剖析(卷1)》(以下稱《卷1》)於2009年7月正式出版,在此不久我就開始了《卷2》的創作。對於《卷1》的寫作,我還算是游刃有餘,但是寫作《卷2》的難度是我始料未及的。如果像市面上大部分專著一樣只涉及WCF編程,我想《卷2》早在一年之前就已經完成了。但是我在寫作之初就沒有將本書定位為一本純粹的WCF編程書籍,而是決心寫一本「深入肌理」,對WCF進行「庖丁解牛」式剖析的書籍。在沒有任何現成資料可供參考的情況下,我只能通過對源碼的分析來了解其底層的實現原理。為了能夠確保這部分內容的正確性,我編寫了很多的測試程序來證實我的想法。
「探究之深」是本書難以在較短的時間之內交付出版的一個主要原因,而另一個因素則是「涉及之廣」。WCF不是微軟在Windows平台下的閉門造車,而是在設計之初就考慮到了針對開放標準的支持。《卷2》涉及到太多的WS-*規范,比如「異常處理」一章涉及到SOAP;「元數據」一章涉及到WS-Policy、WS-Transfer、WS-MEX和WSDL;「事務」一章涉及到WS-Coordination和WS-AT;「可靠會話」一章涉及到WS-RM;「傳輸安全」一章涉及到WS-Security、WS-Trust 、WS-Secure Conversation和WS-Security Policy;「WCF 4.0新特性」一章涉及到WS-Discovery。對於這一系列的WS-*規范,單單從頭到尾看一遍都需要花費不少時間,而我已經不太記得自己究竟看多少遍了。
《卷1》的整個內容基本上都圍繞著WCF本身,但《卷2》卻涉及到不少的背景知識。為了讓讀者對WCF有一個全面而深刻的了解,我在書中涉及到很多背景知識的介紹。比如「事務」一章中花費了很多文字介紹MSDTC和System.Transactions事務;「並發與限流」一章中有針對同步上下文的介紹;為了讓讀者能夠深入認識可靠會話的實現原理,我將其同TCP協議的機制進行類比;「隊列服務」一章中對MSMQ進行了系統的介紹;「傳輸安全」一章中更是涉及到針對非對稱加密以及NTLM和Kerberos認證原理的介紹。
由於寫作難度不小,加上寫作和資料收集只能在工作之餘進行,所以很多次都有中途放棄的念頭。很有意思的是,每次在我下定決心放棄寫作後沒幾天總是會收到《卷1》的讀者給我的留言,這些留言體現了對《卷1》的肯定,充滿了對《卷2》的期待。讀者的肯定和期待一次次給了我堅持下去的力量,前後經歷了兩年的時間終於完成了《卷2》,這算是對讀者的交代,也是對我自己的交代。
《卷2》完稿之後我開始為《卷1》的再版進行修訂。對於出版後的《卷1》我基本上很少翻看,因為我個人基本上不太喜歡翻看自己寫的東西,包括自己寫的400多篇博客文章。針對《卷1》的修訂讓我第一次完整地閱讀自己寫的東西,經過了寫作《卷2》的「折磨」,讓我對WCF有了更加深刻的認識,於是我基於對WCF最新的理解開始對《卷1》的內容進行大刀闊斧的修改。雖然《卷1》大體上還是保留著原來的結構,但是內容已經發生了巨大的改變。據我粗略估計,改動內容的比率基本上達到一半。
最後我將《卷2》和修訂後的《卷1》給李建忠和呂建偉(阿朱)老師幫忙審閱,李建忠老師建議增加關於WCF REST的內容,於是我在《卷1》中新加了「REST服務」一章。由於新的《卷1》已經難現往日模樣,在本書的策劃編輯張春雨老師的建議下我決定將原《卷1》和《卷2》作為一個整體分上、下冊出版,於是才有了你手中的這本《WCF全面解析》。 「實踐出真知」,不斷地在具體應用中進行實踐是學習WCF最有效的手段。實踐是檢驗真理的唯一標准,通過將所學的WCF知識應用到一個真正的應用之中,才能確保我們掌握的知識的正確性。實踐不但可以鞏固我們的所學,還會讓我們意識到不足。《WCF全面解析》在每一章節都會提供一系列的實例演示,讀者可以單獨下載這163個實例的源代碼。

⑵ c#資料庫連接加密

我來回答吧: 不懂可以Hi,我一般都是這么做的

先給你個加密和解密類
告訴你個加密 解密類。
using System;
using System.IO;
using System.Security.Cryptography;

namespace CryptInfoNameSpace
{
class CryptInfo
{
//加密
public static string Encrypt(string text)
{
Rijndael crypt=Rijndael.Create();
byte[] key=new byte[32]{0XA6,0X7D,0XE1,0X3F,0X35,0X0E,0XE1,0XA9,0X83,0XA5,0X62,0XAA,0X7A,0XAE,0X79,0X98,
0XA7,0X33,0X49,0XFF,0XE6,0XAE,0XBF,0X8D,0X8D,0X20,0X8A,0X49,0X31,0X3A,0X12,0X40};
byte[] iv=new byte[16]{0XF8,0X8B,0X01,0XFB,0X08,0X85,0X9A,0XA4,0XBE,0X45,0X28,0X56,0X03,0X42,0XF6,0X19};

crypt.Key=key;
crypt.IV=iv;

MemoryStream ms=new MemoryStream();
ICryptoTransform transformEncode=new ToBase64Transform();
//Base64編碼
CryptoStream csEncode=new CryptoStream(ms,transformEncode,CryptoStreamMode.Write);

CryptoStream csEncrypt=new CryptoStream(csEncode,crypt.CreateEncryptor(),CryptoStreamMode.Write);

System.Text.UTF8Encoding enc=new System.Text.UTF8Encoding();
byte[] rawData=enc.GetBytes(text);

csEncrypt.Write(rawData,0,rawData.Length);
csEncrypt.FlushFinalBlock();

byte[] encryptedData=new byte[ms.Length];
ms.Position=0;
ms.Read(encryptedData,0,(int)ms.Length);
return enc.GetString(encryptedData);
}
//解密,加密解密中的 byte[] key,byte[] iv可以自行修改,加密解密的 數組值一定一致,否則無法對應加密 解密。
public static string Decrypt(string text)
{
Rijndael crypt=Rijndael.Create();
byte[] key=new byte[32]{0XA6,0X7D,0XE1,0X3F,0X35,0X0E,0XE1,0XA9,0X83,0XA5,0X62,0XAA,0X7A,0XAE,0X79,0X98,
0XA7,0X33,0X49,0XFF,0XE6,0XAE,0XBF,0X8D,0X8D,0X20,0X8A,0X49,0X31,0X3A,0X12,0X40};
byte[] iv=new byte[16]{0XF8,0X8B,0X01,0XFB,0X08,0X85,0X9A,0XA4,0XBE,0X45,0X28,0X56,0X03,0X42,0XF6,0X19};

crypt.Key=key;
crypt.IV=iv;

MemoryStream ms=new MemoryStream();

CryptoStream csDecrypt=new CryptoStream(ms,crypt.CreateDecryptor(),CryptoStreamMode.Write);

ICryptoTransform transformDecode=new FromBase64Transform();
CryptoStream csDecode=new CryptoStream(csDecrypt,transformDecode,CryptoStreamMode.Write);

System.Text.UTF8Encoding enc=new System.Text.UTF8Encoding();
byte[] rawData=enc.GetBytes(text);
csDecode.Write(rawData,0,rawData.Length);
csDecode.FlushFinalBlock();

byte[] decryptedData=new byte[ms.Length];
ms.Position=0;
ms.Read(decryptedData,0,(int)ms.Length);
return(enc.GetString(decryptedData));
}
}
}

在項目中 引用該類,
下面個思路:

把數據連接字元串 ,經過CryptInfoNameSpace.CryptInfo.Encrypt(string text)加密後 ,寫入配置文件inf 或者 配置文件txt文件。
當執行Main函數時,讀取配置文件,(如果配置文件不存在,或者讀取錯誤, 重新加密的資料庫連接字元串加密後寫入配置文件)。然後通過函數 CryptInfoNameSpace.CryptInfo.Decrypt(string text)方法解密成原文連接字元串,並傳遞給其他類使用。即可。

⑶ 如何創建通過 WebSocket 進行通信的 WCF 服務

WebSocket是HTML5開始提供的一種瀏覽器與伺服器間進行全雙工通訊的網路技術。在WebSocket API中,瀏覽器和伺服器只需要做一個握手的動作,然後,瀏覽器和伺服器之間就形成了一條快速通道。兩者之間就直接可以數據互相傳送。
Cocos2d-x引擎集成libwebsockets,並在libwebsockets的客戶端API基礎上封裝了一層易用的介面,使得引擎在C++, JS, Lua層都能方便的使用WebSocket來進行游戲網路通訊。
引擎支持最新的WebSocket Version 13。
在C++中使用
詳細代碼可參考引擎目錄下的/samples/Cpp/TestCpp/Classes/ExtensionsTest/NetworkTest/WebSocketTest.cpp文件。
頭文件中的准備工作
首先需要include WebSocket的頭文件。
#include "network/WebSocket.h"
cocos2d::network::WebSocket::Delegate定義了使用WebScocket需要監聽的回調通知介面。使用WebSocket的類,需要public繼承這個Delegate。
class WebSocketTestLayer : public cocos2d::Layer, public cocos2d::network::WebSocket::Delegate
並Override下面的4個介面:
virtual void onOpen(cocos2d::network::WebSocket* ws);
virtual void onMessage(cocos2d::network::WebSocket* ws, const cocos2d::network::WebSocket::Data& data);
virtual void onClose(cocos2d::network::WebSocket* ws);
virtual void onError(cocos2d::network::WebSocket* ws, const cocos2d::network::WebSocket::ErrorCode& error);
後面我們再詳細介紹每個回調介面的含義。
新建WebSocket並初始化
WebSocket.org 提供了一個專門用來測試WebSocket的伺服器"ws://echo.websocket.org"。 測試代碼以鏈接這個伺服器為例,展示如何在Cocos2d-x中使用WebSocket。
新建一個WebSocket:
cocos2d::network::WebSocket* _wsiSendText = new network::WebSocket();
init第一個參數是delegate,設置為this,第二個參數是伺服器地址。 URL中的"ws://"標識是WebSocket協議,加密的WebSocket為"wss://".
_wsiSendText->init(*this, "ws://echo.websocket.org")
WebSocket消息監聽
在調用send發送消息之前,先來看下4個消息回調。
onOpen
init會觸發WebSocket鏈接伺服器,如果成功,WebSocket就會調用onOpen,告訴調用者,客戶端到伺服器的通訊鏈路已經成功建立,可以收發消息了。
void WebSocketTestLayer::onOpen(network::WebSocket* ws)
{
if (ws == _wsiSendText)
{
_sendTextStatus->setString("Send Text WS was opened.");
}
}
onMessage
network::WebSocket::Data對象存儲客戶端接收到的數據, isBinary屬性用來判斷數據是二進制還是文本,len說明數據長度,bytes指向數據。
void WebSocketTestLayer::onMessage(network::WebSocket* ws, const network::WebSocket::Data& data)
{
if (!data.isBinary)
{
_sendTextTimes++;
char times[100] = {0};
sprintf(times, "%d", _sendTextTimes);
std::string textStr = std::string("response text msg: ")+data.bytes+", "+times;
log("%s", textStr.c_str());

_sendTextStatus->setString(textStr.c_str());
}
}
onClose
不管是伺服器主動還是被動關閉了WebSocket,客戶端將收到這個請求後,需要釋放WebSocket內存,並養成良好的習慣:置空指針。
void WebSocketTestLayer::onClose(network::WebSocket* ws)
{
if (ws == _wsiSendText)
{
_wsiSendText = NULL;
}
CC_SAFE_DELETE(ws);
}
onError
客戶端發送的請求,如果發生錯誤,就會收到onError消息,游戲針對不同的錯誤碼,做出相應的處理。
void WebSocketTestLayer::onError(network::WebSocket* ws, const network::WebSocket::ErrorCode& error)
{
log("Error was fired, error code: %d", error);
if (ws == _wsiSendText)
{
char buf[100] = {0};
sprintf(buf, "an error was fired, code: %d", error);
_sendTextStatus->setString(buf);
}
}
send消息到伺服器
在init之後,我們就可以調用send介面,往伺服器發送數據請求。send有文本和二進制兩中模式。
發送文本
_wsiSendText->send("Hello WebSocket, I'm a text message.");
發送二進制數據(多了一個len參數)
_wsiSendBinary->send((unsigned char*)buf, sizeof(buf));
主動關閉WebSocket
這是讓整個流程變得完整的關鍵步驟, 當某個WebSocket的通訊不再使用的時候,我們必須手動關閉這個WebSocket與伺服器的連接。close會觸發onClose消息,而後onClose裡面,我們釋放內存。
_wsiSendText->close();
在Lua中使用
詳細代碼可參考引擎目錄下的/samples/Lua/TestLua/Resources/luaScript/ExtensionTest/WebProxyTest.lua文件。
創建WebSocket對象
腳本介面相對C++要簡單很多,沒有頭文件,創建WebSocket對象使用下面的一行代碼搞定。 參數是伺服器地址。
wsSendText = WebSocket:create("ws://echo.websocket.org")
定義並注冊消息回調函數
回調函數是普通的Lua function,4個消息回調和c++的用途一致,參考上面的說明。
local function wsSendTextOpen(strData)
sendTextStatus:setString("Send Text WS was opened.")
end

local function wsSendTextMessage(strData)
receiveTextTimes= receiveTextTimes + 1
local strInfo= "response text msg: "..strData..", "..receiveTextTimes
sendTextStatus:setString(strInfo)
end

local function wsSendTextClose(strData)
print("_wsiSendText websocket instance closed.")
sendTextStatus = nil
wsSendText = nil
end

local function wsSendTextError(strData)
print("sendText Error was fired")
end
Lua的消息注冊不同於C++的繼承 & Override,有單獨的介面registerScriptHandler。 registerScriptHandler第一個參數是回調函數名,第二個參數是回調類型。 每一個WebSocket實例都需要綁定一次。
if nil ~= wsSendText then
wsSendText:registerScriptHandler(wsSendTextOpen,cc.WEBSOCKET_OPEN)
wsSendText:registerScriptHandler(wsSendTextMessage,cc.WEBSOCKET_MESSAGE)
wsSendText:registerScriptHandler(wsSendTextClose,cc.WEBSOCKET_CLOSE)
wsSendText:registerScriptHandler(wsSendTextError,cc.WEBSOCKET_ERROR)
end
send消息
Lua中發送不區分文本或二進制模式,均使用下面的介面。
wsSendText:sendString("Hello WebSocket中文, I'm a text message.")
主動關閉WebSocket
當某個WebSocket的通訊不再使用的時候,我們必須手動關閉這個WebSocket與伺服器的連接,以釋放伺服器和客戶端的資源。close會觸發cc.WEBSOCKET_CLOSE消息。
wsSendText:close()
在JSB中使用
詳細代碼可參考引擎目錄下的/samples/Javascript/Shared/tests/ExtensionsTest/NetworkTest/WebSocketTest.js文件。
創建WebSocket對象
腳本介面相對C++要簡單很多,沒有頭文件,創建WebSocket對象使用下面的一行代碼搞定。 參數是伺服器地址。
this._wsiSendText = new WebSocket("ws://echo.websocket.org");
設置消息回調函數
JSB中的回調函數是WebSocket實例的屬性,使用匿名函數直接賦值給對應屬性。可以看出JS語言的特性,讓綁定回調函數更加優美。四個回調的含義,參考上面c++的描述。
this._wsiSendText.onopen = function(evt) {
self._sendTextStatus.setString("Send Text WS was opened.");
};

this._wsiSendText.onmessage = function(evt) {
self._sendTextTimes++;
var textStr = "response text msg: "+evt.data+", "+self._sendTextTimes;
cc.log(textStr);

self._sendTextStatus.setString(textStr);
};

this._wsiSendText.onerror = function(evt) {
cc.log("sendText Error was fired");
};

this._wsiSendText.onclose = function(evt) {
cc.log("_wsiSendText websocket instance closed.");
self._wsiSendText = null;
};
send消息
發送文本,無需轉換,代碼如下:
this._wsiSendText.send("Hello WebSocket中文, I'm a text message.");
發送二進制,測試代碼中,使用_stringConvertToArray函數來轉換string為二進制數據,模擬二進制的發送。 new Uint16Array創建一個16位無符號整數值的類型化數組,內容將初始化為0。然後,循環讀取字元串的每一個字元的Unicode編碼,並存入Uint16Array,最終得到一個二進制對象。
_stringConvertToArray:function (strData) {
if (!strData)
returnnull;

var arrData = new Uint16Array(strData.length);
for (var i = 0; i < strData.length; i++) {
arrData[i] = strData.charCodeAt(i);
}
return arrData;
},
send二進制介面和send文本沒有區別,區別在於傳入的對象,JS內部自己知道對象是文本還是二進制數據,然後做不同的處理。
var buf = "Hello WebSocket中文,\0 I'm\0 a\0 binary\0 message\0.";
var binary = this._stringConvertToArray(buf);

this._wsiSendBinary.send(binary.buffer);
主動關閉WebSocket
當某個WebSocket的通訊不再使用的時候,我們必須手動關閉這個WebSocket與伺服器的連接,以釋放伺服器和客戶端的資源。close會觸發onclose消息。
onExit: function() {

if (this._wsiSendText)

this._wsiSendText.close();

⑷ .NET 的 WCF 和 WebService 有什麼區別

微軟論壇的斑竹回答如下:

1.WebService:嚴格來說是行業標准,不是技術,使用XML擴展標記語言來表示數據(這個是誇語言和平台的關鍵)。微軟的Web服務實現稱為ASP.NET Web Service.它使用Soap簡單對象訪問協議來實現分布式環境里應用程序之間的數據交互。WSDL來實現服務介面相關的描述。此外Web services 可以注冊到UDDI中心.供其客戶查找使用。
後來微軟做了ASP.NET Web Service的安全,性能,數據加密、解密,託管宿主等多方面的擴展,稱為WSE系列,這個是過度產品,最高到WSE3.0.後來就是WCF時代。

2.WCF:其實一定程度上就是ASP.NET Web Service,因為它支持Web Service的行業標准和核心協議,因此ASP.NET Web Service和WSE能做的事情,它幾乎都能勝任,跨平台和語言更不是問題(數據也支持XML格式化,而且提供了自己的格式化器)。
但是WCF作為微軟主推一個通訊組件或者平台,它的目標不僅僅是在支持和集成Web Service,因為它還兼容和具備了微軟早期很多技術的特性。
根據微軟官方的解釋,WCF(之前的版本名為「Indigo」)是使用託管代碼建立和運行面向服務(Service Oriented)應用程序的統一框架。它使得開發者能夠建立一個跨平台的安全、可信賴、事務性的解決方案,且能與已有系統兼容協作。WCF是微軟分布式應用程序開發的集大成者,它整合了.Net平台下所有的和分布式系統有關的技術,如Enterprise Sevices(COM+).Net Remoting、Web Service(ASMX)、WSE3.0和MSMQ消息隊列。以通信(Communiation)范圍而論,它可以跨進程、跨機器、跨子網、企業網乃至於 Internet;以宿主程序而論,可以以ASP.NET,EXE,WPF,Windows Forms,NT Service,COM+作為宿主(Host)。WCF可以支持的協議包括TCP,HTTP,跨進程以及自定義,安全模式則包括SAML, Kerberos,X509,用戶/密碼,自定義等多種標准與模式。也就是說,在WCF框架下,開發基於SOA的分布式系統變得容易了,微軟將所有與此相關的技術要素都包含在內,掌握了WCF,就相當於掌握了叩開SOA大門的鑰匙。

⑸ 什麼是WCF

Windows Communication Foundation(WCF)是由微軟開發的一系列支持數據通信的應用程序框架,可以翻譯為Windows 通訊開發平台。
整合了原有的windows通訊的 .net Remoting,WebService,Socket的機制,並融合有HTTP和FTP的相關技術。
是Windows平台上開發分布式應用最佳的實踐方式。
簡單的歸結為四大部分
1>.網路服務的協議,即用什麼網路協議開放客戶端接入。
2>.業務服務的協議,即聲明服務提供哪些業務。
3>.數據類型聲明,即對客戶端與伺服器端通信的數據部分進行一致化。
4>.傳輸安全性相關的定義。它是.NET框架的一部分,由 .NET Framework3.0 開始引入,與Windows Presentation Foundation及Windows Workflow Foundation並行為新一代 Windows操作系統以及 WinFX 的三個重大應用程序開發類庫。在 .NET Framework2.0 以及前版本中,微軟發展了 Web Service(SOAP with HTTP communication),.NET Remoting (TCP/HTTP/Pipeline communication) 以及基礎的 Winsock 等通信支持。由於各個通信方法的設計方法不同,而且彼此之間也有相互的重疊性,對於開發人員來說,不同的選擇會有不同的程序設計模型,而且必須要重新學習,讓開發人員在使用中有許多不便。同時,面向服務架構(Service-Oriented Architecture) 也開始盛行於軟體工業中,因此微軟重新查看了這些通信方法,並設計了一個統一的程序開發模型,對於數據通信提供了最基本最有彈性的支持,這就是 Windows Communication Foundation。

⑹ WCF和WebService的區別,有什麼優勢

WCF是微軟.NET戰略中的一大集成者,將.NET中各種網路通信技術集成在一起,構成了WCF。而Web Service是一個很通用的概念,在asp.net中就指一個web服務,wcf包含了所有.net以前的網路通信技術,當然也就包含了web service。

⑺ 技術中的wcf是什麼意思

Windows Communication Foundation(WCF)是由微軟開發的一系列支持數據通信的應用程序框架,可以翻譯為Windows 通訊開發平台。

整合了原有的windows通訊的 .net Remoting,WebService,Socket的機制,並融合有HTTP和FTP的相關技術。

是Windows平台上開發分布式應用最佳的實踐方式。

簡單的歸結為四大部分:

1、網路服務的協議,即用什麼網路協議開放客戶端接入。

2、業務服務的協議,即聲明服務提供哪些業務。

3、數據類型聲明,即對客戶端與伺服器端通信的數據部分進行一致化。

4、傳輸安全性相關的定義。

wcf客戶端:

對於 WCF 的客戶端來說,WCF 服務就像是一個 Web Service 一樣,在 Visual Studio 2008 中,所有 WCF 服務的連接都是由客戶端的 服務代理(WCF Service Proxy) 來運行,開發人員不用花費太多心思在通信上,而 WCF Service Proxy 在 Visual Studio 中被稱為服務引用(Service Reference)。

在 Visual Studio 中加入 WCF 的服務引用時,Visual Studio 會自動幫開發人員做掉一些必要工作(例如組態創建以及產生 Service Proxy 等),開發人員只需要在代碼中取用 WCF Service Proxy 對象即可。

⑻ Web Service和WCF的到底有什麼區別

【1】Web Service:嚴格來說是行業標准,也就是Web Service 規范,也稱作WS-*規范,既不是框架,也不是技術。
它有一套完成的規范體系標准,而且在持續不斷的更新完善中。
它使用XML擴展標記語言來表示數據(這個是誇語言和平台的關鍵)。微軟的Web服務實現稱為ASP.NET Web Service.它使用Soap簡單對象訪問協議來實現分布式環境里應用程序之間的數據交互。WSDL來實現服務介面相關的描述。此外Web services 可以注冊到UDDI中心.供其客戶查找使用。
後來微軟做了ASP.NET Web Service的安全,性能,數據加密、解密,託管宿主等多方面的擴展,稱為WSE系列,這個是過度產品,最高到WSE3.0.後來就是WCF時代。
【2】ASP.NET Web Service:微軟提供了Web服務的開發框架,屬於ASP.NET Framework的一部分,但是支持早起的WS規范。比如SOAP1.1。
【3】WCF:WCF 是一個分布式應用的開發框架,屬於特定的技術,或者平台。既不是標准也不是規范。
WCF其實一定程度上就是ASP.NET Web Service,因為它支持Web Service的行業標准和核心協議,因此ASP.NET Web Service和WSE能做的事情,它幾乎都能勝任,跨平台和語言更不是問題(數據也支持XML格式化,而且提供了自己的格式化器)。
但是WCF作為微軟主推一個通訊組件或者平台,它的目標不僅僅是在支持和集成Web Service,因為它還兼容和具備了微軟早期很多技術的特性。
根據微軟官方的解釋,WCF(之前的版本名為「Indigo」)是使用託管代碼建立和運行面向服務(Service Oriented)應用程序的統一框架。它使得開發者能夠建立一個跨平台的安全、可信賴、事務性的解決方案,且能與已有系統兼容協作。WCF是微軟分布式應用程序開發的集大成者,它整合了.Net平台下所有的和分布式系統有關的技術,如Enterprise Sevices(COM+).Net Remoting、Web Service(ASMX)、WSE3.0和MSMQ消息隊列。以通信(Communiation)范圍而論,它可以跨進程、跨機器、跨子網、企業網乃至於 Internet;以宿主程序而論,可以以ASP.NET,EXE,WPF,Windows Forms,NT Service,COM+作為宿主(Host)。WCF可以支持的協議包括TCP,HTTP,跨進程以及自定義,安全模式則包括SAML, Kerberos,X509,用戶/密碼,自定義等多種標准與模式。也就是說,在WCF框架下,開發基於SOA的分布式系統變得容易了,微軟將所有與此相關的技術要素都包含在內,掌握了WCF,就相當於掌握了叩開SOA大門的鑰匙 。如果你想對WCF學習系統化一些,必須向對如Enterprise Sevices(COM+).Net Remoting、Web Service(ASMX)、WSE3.0和MSMQ消息隊列也有個詳細的認識的話,你可以看看我的博客,在此之前我對WCF學習相關的知識都系統的進行了整理。這個是文章目錄:老徐的博客:文章目錄 。
還有一點就是,很多人對WCF學習感興趣,當初我也是,直接奔WCF而來,其實在後來的學習中感覺吃力,因為WCF宣稱的很多特性和優勢,我們無法理解,更無法體會。文中提到了很多微軟的早期技術如果都沒有接觸過,這些對比我們就無法有深刻的體會。
【4】結論:
那麼我們看了這些分析以後,就可以知道以上的結論為什麼錯誤了。
不能哪一個技術框架和行業標准作比較,任何對於二者的比較 都是錯誤的,因為兩者根不不在同一個范疇里。就好比不能拿個汽車和交通法規比較一樣。這是個誤區。
Web Service太舊了:框架都版本的差異,功能特性上卻是有新舊之分,但是對於特定的系統,適合自己的就是最好的。 Web Service 就是 ASP.NET Web Service:同樣不是一個范疇。前者規范,後者是框架 WCF比Web Service性能好:不是一個范疇, WCF 比 ASP.NET Web Service快:不一定,需要特定的限制條件,WCF使用BasicHttpBinding的時候與ASP.NET Web Service協議一樣。 WCF比Web Service速度快:同樣概念不嚴格。 WCF比Web Service強大:WCF卻是集成了多種微軟的分布式技術,但是這里應該嚴格說是:ASP.NET Web Service WCF比 Web Service安全:不嚴格。其次WCF也可以開發完全裸奔的應用程序。 Web Service必將被WCF取代;Web Service不會被WCF取代!前者是一套廣泛使用的規范。如果說WCF能取代的是ASP.NET Web Service,因為二者都是.NET平台上的技術。 WCF其實就是Web Service:WCF在某些情況下不遵守 Web服務規范,也就是可以開發非服務性質的應用。而且不能簡單等同。 WCF非常簡單,其實沒有什麼:WCF雖然是個服務開發框架,但是如果你深入學習,會發現WCF架構的強大之處。單單是WCF安全這一塊已經相當的復雜了。況且還要統一編程模型,兼容和支持許多早期的分布式技術。很多人輕易下這樣的結論,一定是僅僅看了一些文章或書籍,不一定寫過代碼。高手不會這樣武斷地下結論。

在WCF支持的各種協議中:每種協議中消息都有不同的傳輸格式、不同的編碼格式等等,WCF 以統一的方式來調用各種編碼器、進行傳輸。假如以後有新的協議出現,WCF並不用更改現有的框架、只用針對該協議做擴展就可以支持該協議了。這就很好地適應了變化,可以說WCF是封裝變化的絕佳實踐。
再來談談你的問題,WCF與Web 服務是什麼關系,WCF 能夠創建兼容 Web 服務的服務,也就是說可以創建能夠與Web 服務互聯互通的服務,他們兩個並不能用簡單包含或者等同關系來表述。WCF 是一套框架,用來創建各種服務。其中包括創建 Web服務(採用 basicHttpBinding綁定的服務就是一個Web 服務)。

WCF可以不依賴於IIS。
WCF可以配置成BasicHttpBinding來兼容(或者說變身成)WS。
WCF可以基於TCP或者MessegeQueue來傳輸數據。
WCF的可配置性比WS強,比如安全性。
WCF可以是有狀態的,並支持事務。
WCF 支持多種通信協議 Http/Https 、TCP/UDP、MSMQ、命名管道、對等網、
消息可達性、事務流等。
WCF 可以與ASP.NET 集成、共享一個上下文(HttpContext)。
WCF 支持多種消息傳輸格式 :text,binary,mtom,Json 等。
WCF 安全性要強:支持對稱安全、非對稱安全、消息安全、傳輸安全、
SSL 流安全、Windows 流安全等。
WCF 支持多種會話模式:單向、雙向、請求/響應。
WCF 支持REST 。
WCF 支持多種格式化方式。DataContractSerializer、XmlSerializer、
DataContractJsonSerializer 等。
WCF 支持 WAS hosting、Windows 服務 hosting、Self-Hosting、IIS hosting 等。
WCF 支持多種並發模式:單例、單調、會話 。

⑼ WCF的雙工通訊跟socket有什麼區別WCF的雙工通訊能完全替代socket的偵聽嗎

第一:在服務契約上標注一下你的回調契約是哪個即可。
[ServiceContract(CallbackContract = typeof(你的回調契約類型))]

第二:回調契約就是用於服務端控制客戶端的。比如,一個典型場景是,客戶端提交請求以後立即返回;服務端處理一段時間後,再通知客戶端結果。

第三:「假如我有一個總控制台,想控制下面的各個客戶端,是不是必須使用wcf雙工技術才能實現?」是的。

第四:「QQ的遠程操作要用什麼技術弄呢」這個就比較復雜了。簡而言之,就是操作端往接收端發送指令,接收端根據指令來操作,並返回畫面數據。比如,操作端發送滑鼠鍵盤的信息,接收端把這些信息變成Windows消息,發送給操作系統(相當於重現一次滑鼠鍵盤操作)。

⑽ WCF的發展前景怎麼樣

可以說是ASP.NET Web Service升級版本 ,webservice進行了性能,數據加密、解密,託管宿主等多方面的擴展,最後的WCF是個很成熟的產品,將廣泛用於分布式開發

熱點內容
iphone5s照片文件夾 發布:2025-08-23 15:32:20 瀏覽:799
微博微信登錄密碼是什麼 發布:2025-08-23 15:13:38 瀏覽:199
衡量一個存儲器的指標通常是什麼 發布:2025-08-23 15:12:16 瀏覽:58
資料庫刪除實例 發布:2025-08-23 14:21:27 瀏覽:315
qqandroid反編譯 發布:2025-08-23 14:02:23 瀏覽:908
高級語言編譯有哪些 發布:2025-08-23 13:23:49 瀏覽:575
win32編譯 發布:2025-08-23 13:19:16 瀏覽:659
備份資料庫日誌 發布:2025-08-23 13:07:05 瀏覽:519
php模塊開發 發布:2025-08-23 12:58:43 瀏覽:924
java讀寫資料庫 發布:2025-08-23 12:41:40 瀏覽:405