開發高效能的WebService應用 zhuan

2021-09-05 23:20:24 字數 3219 閱讀 6518

開發高效能的webservice應用

一、      webservice概述

1、      效能

?設計時就考慮效能

?不要在事後再加入效能!

?在專案開發的整個過程中反覆測試

?兩種量化web效能的方法:

1) 機器吞吐率(requests/sec)

2) 響應時間(time tofirst/last bytes)

2、物件導向

?應用於同一平台和執行環境

?共享型別而不是schemas

?採用便宜, 透明通訊

?物件的標識與生命週期由系統維護

?客戶機和伺服器的同步的部署

?容易概念化,因而提供乙個自然的模型

?一般不需要狀態管理

?應用於乙個可**的序列、期限和結果

?目標是遠端透明地使用方法和型別

3、面向服務

? 應用於異構平台和執行環境

? 共享schemas而不是型別

? 採用高成本, 明確通訊

? 服務是自治的: 安全和失效是隔離

? 允許的連續, 分離部署客戶機和伺服器

? 基於軟體元件和分布的物件,依賴服務的協議

? 擁有並維護狀態

? 基於訊息, 非同步的, 和長通訊

? 目標是提供服務隔離和呼叫的標準。

4、web service效能設計的考慮

? 設計"大塊頭"的介面減少往返。

? 基於訊息的程式設計而不是遠端過程呼叫(rpc) 。

? 使用xml字串作為引數。

? 盡量使用原始資料型別引數。

? 避免在呼叫之間維護伺服器狀態。

? 考慮為複雜的webmethod提供輸入校驗。

? 考慮對webmethod的結果進行快取。

? 選擇適用的大資料報傳送方式。

? 避免呼叫本地的webservice。

5、基於訊息程式設計和rpc

? 訊息

//client

string msg = "...";

mymethod(msg);

//server

[webmethod]

void mymethod(string msg)

? rpc

serv.senditemstobepurchased(array items);

serv.shippingaddress(string address);

serv.checkout();

二、webservice效能最佳實踐

? 連線與執行緒優化

? webmethod的優化

? 高效地呼叫webmethod

? 設定超時

? 快取

? 狀態管理

1、連線

?配置maxconnection 屬性。

示例:

修改:

?對webservice按優先順序分配連線資源

?使用單一身份進行呼叫。

serv = new webservice1();

serv.preauthenticate=true;

icredentials concredentials =new

networkcredential("uid","pwd","npstest" );

serv.credentials = concredentials;

serv.allowautoredirect=false;

serv.connectiongroupname = "sameforallusers";

?為整合認證使用unsafeauthenticatedconnectionsharing 。

?為基本驗證使用preauthenticate 。

2、webmethods

?使用原始型別引數。

?考慮使用緩衝。

?將webmethod的返回快取。

?只在需要會話狀態時才使用它。

大資料報的處理

?使用位元組陣列作為引數或返回值

?返回乙個url

?使用序列化流

序列化?使用xmlignore減少序列化。

?減少往返。

?考慮使用xml 壓縮。

public class myclass

非同步webmethod

?用非同步webmethods對i/o 操作。

?當webmethods依賴於工作執行緒時,不要使用非同步。

//webservice

[webmethod]

iasyncresult beginmyproc(...)           //the wsdl will show the method as myproc(...)

[webmethod]

endmyproc(...)

單工通訊

?如果不需要返回,考慮使用oneway屬性。

[soapdocumentmethod(oneway=true)]

[webmethod(description="return immediately")]

public void somemethod()

com互動

?建議: 盡量避免互動

?最好將com**移植到.net

?可能會很昂貴, 尤其對於陣列操作

?「受管」 與「不受管」 轉換

?注意單元執行緒元件

?預設情況asp.net 使用mta執行緒

?損害sta 元件效能

注意所有vb6元件!

3、非同步呼叫

?當有併發任務時例用非同步呼叫webservice。

?使用非同步呼叫多個不相關的webservice。

?非同步叫呼叫webservice可以增加ui 響應。

4、超時

?適當地設定**的超時。

?設定您的asp.net 超時大於您的webservice的超時。

?如果頁面超時,則放棄頁面與webservice的連線。

mywebserv obj = new mywebserv();

obj.timeout = 15000; // in milliseconds

5、快取

?對時效性不強的資料進行快取。

?考慮提供與快取所相關的資訊給客戶。

?考慮使用邊界快取,如isa上的快取。

6、狀態管理

開發高效能的WebService應用

一 webservice概述 1 效能 設計時就考慮效能 不要在事後再加入效能 在專案開發的整個過程中反覆測試 兩種量化web效能的方法 1 機器吞吐率 requests sec 2 響應時間 time tofirst last bytes 2 物件導向 應用於同一平台和執行環境 共享型別而不是sc...

高效能web Server 開發心得

高併發web伺服器處理 一 html靜態化 效率最高 消耗最小的就是純靜態化的html頁面,所以我們盡可能使我們的 上的頁面採用靜態頁面來實現,如使用資訊發布系統cms 二.伺服器分離 對於web伺服器來說,不管是apache iis還是其他容器,是最消耗資源的,於是我們有必要將與頁面進行分離,在處...

高效能網頁開發規則

1 原則一如果能使頁面html顯示跟後台處理同時進行,這是乙個比較好的方式 比如說將頁面上容易顯示的部分優先反饋給瀏覽器,然後再接著繼續處理下面的步驟這樣比較 象php中在html的後可以使用flush 方法,提前將部分資訊返回給客戶端,通常有css js等資訊 然後可以將js css打包 壓縮 儘...