2012-12-06 58 views
2

我有一個關於WCF代理創建一個問題,它可能是初級水平,但要問。我使用VS添加服務引用爲我的客戶端中的wcf服務創建了一個代理。現在因爲該服務中的某些方法可能需要更長的時間來執行並阻止所有可用的代理連接,所以我想使用來自客戶端的同一服務的不同代理對每個方法進行調用。WCF代理創建

現在的問題是:

  1. 是我的做法沒錯,我的意思是將這個解決我的目的是什麼?
  2. 對於使用不同的代理做我需要使用不同的名稱添加多個服務引用?
  3. 作爲一個選項指向2我能不能添加服務引用一次,並在複製具有不同名稱的配置相同的終點?所以每次我想創建一個新的代理服務器時,我都會在代理的構造函數中將不同端點的名稱傳遞給同一服務。
  4. 而且是(多個代理=代理的多個實例)?

問候

回答

0

我認爲最好的辦法是使用異步操作的單一代理實例。 這就像網絡瀏覽器 - 你可以在很多標籤中看到相同的網頁。它們都獨立工作,但使用相同的端點資源。試着讀something like this

+0

我不認爲這是一個好主意。如果某個代理實例發生某些情況,則所有的異步調用都將失敗,因爲代理處於失敗狀態。 –

+0

爲什麼代理失敗?應用程序錯誤可以處理,並且沒問題。如果通道失敗,其他實例也會失敗,我想。即使只在失敗時重新創建實例,它也比每次服務調用都要便宜。 – lavrik

+0

如果您有一些可以重新創建頻道的智能代理,那麼這應該不是問題。但代理可能因多種原因失敗,這就是爲什麼他們內置了失敗狀態。 –

0

您可以使用一個單一的配置和單個端點的單一服務的參考。要在服務上並行調用多個方法,您可以在不同的線程中或在標記爲async的不同方法中創建多個代理實例。

+0

史蒂夫,謝謝你的迴應。我不僅關心並行呼叫,還關心連接池耗盡情況。因此,如果我的代理具有maxconnection = 10的設置,並且如果哪個塊的方法獲得前10個請求,則我的連接將耗盡。現在,如果請求另一個不阻塞的方法進入此請求,則不會傳遞給服務,因爲連接數量已超過10個。希望我有道理,如果我在這裏錯過了一點,請糾正我。 – Zepher684

+0

這很有道理,但如果您將maxConnections設置的值和WCF服務可用資源的基礎加載到服務必須處理的負載上,則可以避免發生這種情況。您還可以查看設置適當的發送和接收超時時間,並將系統設置爲在出現時間過長時優雅地失敗。 –