开发高性能的WebService应用 zhuan
一、????? 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 = "<Items>...</Items>";
MyMethod(msg);
//Server
[WebMethod]
void MyMethod(string msg){ . . . }
? RPC
Serv.SendItemsToBePurchased(Array[] items);
Serv.ShippingAddress(string Address);
Serv.CheckOut();
二、WebService性能最佳實踐
? 連接與線程優化
? WebMethod的優化
? 高效地調用WebMethod
? 設置超時
? 緩存
? 狀態管理
1、連接
?配置maxconnection 屬性。
示例:
<connectionManagement>
<add address="*" maxconnection="12"/>
</connectionManagement>
修改:
<connectionManagement>
<add address="WebServiceA" maxconnection="8">
<add address="WebServiceB" maxconnection="4">
</connectionManagement>
?對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
?使用串行化流
<configuration>
<system.web>
<httpRuntime maxRequestLength="8096"
useFullyQualifiedRedirectUrl="true"
executionTimeout="45"/>
</system.web>
</configuration>
串行化
?使用XmlIgnore減少串行化。
?減少往返。
?考慮使用XML 壓縮。
public class MyClass
{
// The str1 value will be serialized.
public string str1;
/* This field will be ignored when
serialized--unless it's overridden. */
[XmlIgnoreAttribute]
public string str2;
}
異步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、狀態管理
?只在需要會話狀態時才使用它。
?減少應用狀態與服務器的親合力。
? ?InProc
? ?StateServer
? ?SQLServer
注:主要資料來自王興明的WebCast。
Demo下載
OscarXie.net
關注質量與體驗——電子商務與自動化測試
http://www.cnblogs.com/oscarxie/
轉載于:https://www.cnblogs.com/csj007523/archive/2010/04/07/1706341.html
總結
以上是生活随笔為你收集整理的开发高性能的WebService应用 zhuan的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: YUI Grid CSS的优雅设计(转)
- 下一篇: SQL Server2005重装Perf