背景
隨著網際網路的不斷發展,傳統的
web應用程式已經不能完全滿足使用者的需要。由於桌面應用程式相比
web應用程式可以實現更多的功能,並相比
web應用程式更容易訪問本地資源,所以一些界於
bs架構和
cs架構之間的桌面應用(如瘦客戶端)便應運而生,這些桌面應用在客戶機上以
winform
的形式存在,而伺服器側依然是
web server
。這種體系架構需要桌面應用程式和
web server
之間可以有效通訊,一般的做法是通過
web service
來實現桌面和
web server
之間的通訊,但
web service
的設計初衷並非是用於通訊,而是更側重於對遠端服務的呼叫,其體系結構相對比較複雜,如果僅僅用來通訊,難免讓人感覺大材小用。介於此,我開發了一款輕量級的
web通訊元件,呼叫者只需呼叫乙個函式就可以將桌面應用程式中需要通訊的物件傳送到
web應用程式中,並可以從
web應用程式獲得其響應的物件,如果呼叫者需要傳送加密訊息,該元件提供了傳送加密訊息的方法,同樣是非常簡單。
工作原理
圖1 web comm
元件工作原理
如圖1
所示,web comm
元件提供兩個傳送訊息的方法:
sendmsg
和sendsecmsg
,分別提供傳送普通資訊和傳送加密訊息的介面。
傳送普通資訊很簡單,傳送側對要傳送的訊息物件序列化,接受側對訊息物件反序列化。
傳送加密訊息的過程是先獲取
web server
側的非對稱加密公鑰,這個過程在程序存續期間只進行一次。然後隨機產生乙個
des
對稱加密的金鑰,訊息體用對稱加密金鑰加密,對稱加密金鑰用非對稱加密公鑰加密,即在應用層和傳輸層之間加入了乙個加密層,類似
ssl的原理。
使用說明
桌面側呼叫介面
傳送普通資訊介面:
webcomm.ccntwebcomm. sendmsg
//////
傳送訊息
///通過這個方法傳送訊息不進行加密
///
///web server
的url
///訊息事件號
///訊息歸屬的使用者名稱
///訊息體
///web server
響應後返回的訊息
///出錯觸發ccommexception異常
//////
msg---> web server
///response
///
public
void sendmsg(string url, int evt, object msg, out
object response)
傳送加密訊息介面:
webcomm.ccntwebcomm. sendsecmsg
//////傳送安全訊息
///通過這個方法傳送的訊息是進行過加密的。
///
///web server
的url
///訊息事件號
///訊息歸屬的使用者名稱
///訊息體
///web server
響應後返回的訊息
///出錯觸發ccommexception異常
//////
msg---> web server
///response
///
public
void sendsecmsg(string url, int evt, object msg, out
object response)
web server
側介面
web server
側作為訊息的接受側只需要將接受訊息的頁面做如下處理,即可以實現和桌面應用程式通訊。
1、頁面程式從
webcomm.cw**sgbase
繼承例如
public partial class _default : webcomm.cw**sgbase 2、
過載page_load
new protected void page_load(object sender, eventargs e) 3、
過載訊息接受函式
proces**essage
protected override void proces**essage(int evt, object msg, out object response)
錯誤碼
[serializable]
public
enum
t_commerror
注意事項
1、由於傳送訊息過程需要對訊息進行序列化和反序列化,所以需要被傳送的訊息必須可以被序列化,其實很簡單,就是所有需要傳送的訊息類都要實現
[serializable]
屬性2、
1000
以下的訊息號為系統保留,傳送訊息時訊息號必須大於等於1000
示例程式說明
桌面側的示例程式在
******
目錄下,其完成向
web server
中接收訊息的
url傳送普通資訊和加密訊息,訊息體為乙個整數
傳送普通資訊的呼叫過程
private
void buttonsendmsg_click(object sender, eventargs e)
, errmsg=, stack:/r/n",
error.error, error.errmsg, error.stacktrace));
} else}}
catch (ccommexception ce)
, errmsg=",
ce.errorcode, ce.message));
} catch (exception e1)
",
e1.message));
} }
傳送加密訊息的呼叫過程
private
void buttonsendsecmsg_click(object sender, eventargs e)
, errmsg=, stack:/r/n",
error.error, error.errmsg, error.stacktrace));
} else}}
catch (ccommexception ce)
, errmsg=",
ce.errorcode, ce.message));
} catch (exception e1)
",
e1.message));
}
}
web server
側的示例程式是
web
目錄下的
webmsg.aspx
,其接收到
******
傳送來的訊息後將訊息體加
1後通過
response
返回給******
,******
得到這個返回值後用這個值更新當前的訊息值。
以下**是
web server
側接收訊息的處理**
protected override void proces**essage(int evt, object msg, out object response)
}開源**
一款輕量級的桌面WebServer通訊元件
一款輕量級的 web 通訊元件 個人部落格 2007 7 南京背景 隨著網際網路的不斷發展,傳統的 web應用程式已經不能完全滿足使用者的需要。由於桌面應用程式相比 web應用程式可以實現更多的功能,並相比 web應用程式更容易訪問本地資源,所以一些界於 bs架構和 cs架構之間的桌面應用 如瘦客戶...
curlite 一款輕量級的curl元件
curlite,一款輕量級的php curl元件 github php的curl功能強大,但是原生curl引數眾多,無形中增大了學習和使用的成本。curlite由此誕生。composer require zhusaidong curlite dev masterrequire once vendor...
Nginx 效能優越的輕量級web server
今天開啟maxthon cn.maxthon.com 發現500錯誤,後面有出個單詞 nginx 按照我知道的,500錯誤的頁面都會跟著伺服器軟體名稱,覺著沒見過這個單詞,google了一下 找到如下發現 nginx,可以發音為 engine x 是apache2.2 mod proxy balan...