WCF 第五章 控制併發例項的數量

2021-09-06 01:55:28 字數 1813 閱讀 2507

預設情況下,wcf 宿主將會啟動盡可能多的例項來處理請求訊息。如果乙個服務的例項和並發行為並沒有確定,wcf將會為每個進入的請求建立乙個服務例項同時將按照需要分配執行緒來反應請求。總體來說這是乙個對效能和擴充套件性都很好的解決方案因為服務將會最大化擴充套件硬體效能。

但是有很多情況你可能想捨棄使用這種行為。為了這個目的,有三種在併發和例項上的設定可以實現。這些定義在配置檔案的行為組分的servicethrottling元素裡。

maxconcurrentinstances行為控制有多少個服務例項可以被乙個服務建立。這個設定是有用的如果concurrencymode是percall或者persession,因為這兩個設定都可以指導wcf按照要求建立例項。通過定義wcf可以建立的例項的最大數目,你設定的例項數目的上限將會儲存在記憶體中。當限制達到時,不會有更多的例項被建立除非其他例項被**或重用。

列表5.6顯示了乙個沒有確定concurrencymode和instancingmode的服務,這意味著將會使用預設值single和persession.服務操作花費20秒完成。

列表5.6 使用預設併發和例項行為的服務

[servicecontract]

public inte***ce istockservice

public class stockservice : istockservice

:created new instance of stockservice on thread", datetime.now);

}public stockprice getprice(string ticker)

: getprice called on thread ", datetime.now, thread.currentthread.managedthreadid);

thread.sleep(2000);

return 94.85;}}

列表5.7 顯示了乙個非同步呼叫服務端10次的客戶端

class program

: calling getprice", datetime.now);

p.begingetprice("msft", getpricecallback, p);

interlocked.increment(ref c);

}while (c > 0) //wait until all responses come back

console.readline();

}static void getpricecallback(iasyncresult ar)

: price: ", datetime.now, p.price);

((stockserviceclient)ar.asyncstate).close();

interlocked.decrement(ref c);

}catch (exception ex)}}

列表5.8 使用maxconcurrentinstances限制併發數量

<?xml version="1.0" encoding="utf-8" ?>

5.6顯示了客戶端(左邊)輸出和服務端(右邊)輸出。在客戶端,注意當程式啟動時10次呼叫是如何立即執行的,然後5個結果在20秒鐘後返回而另外5個結果在另外20秒鐘後返回。在服務端輸出,注意前5個例項是如何在客戶端請求到來時立即建立的,但是另外5個例項沒有建立直到前5個例項關閉了以後。

5.6 控制併發例項的輸出

WCF 第五章 行為

行為是wcf影響執行時操作的類。行為作為wcf執行時被呼叫,在客戶端和服務端執行並作為訊息在兩者之間流轉。因為行為執行在這些重要的時間,它們被用來實現很多wcf的內建特性。它們也是乙個重要的自定義擴充套件點。例如,servicehost用來定義乙個服務端的例項和併發方面,另外也分發訊息給適當的操作。...

第五章 選擇控制結構

目錄 和 的優先順序 演算法在問題求解中有什麼作用?常用的演算法描述方法有哪些?break 語句在 switch語句中有什麼作用?計算機問題求解和生活中問題求解方法有什麼異同點?演算法有哪些基本特性?兩個浮點數如何比較相等?if x 3.5 的寫法是否正確?若int i float f 表示式i 0...

第五章 PHP流程控制

1.順序結構 2.分支結構 2.1 if.else 1 2 today date w 獲取今天星期幾 3if today 0 else 8 2.2 if.elseif 2.3 switch 3.迴圈結構 3.1 while 1 2 num 1 3while num 100 7 3.2 do.whil...