2012-07-23 21 views
3

我有以下情形。針對長時間運行的應用程序的WCF驗證會話

有一個WCF .NET 4服務,託管在IIS 7

該服務將兩個類型的客戶端進行訪問:

  1. Silverlight客戶端(將在後面創建)
  2. 三個C#.NET 4控制檯應用程序(已創建和測試)

要訪問此WCF服務,我創建了一個簡單的包裝DLL(我不使用Visual Studio自動生成引用以避免在我的WCF更改時在多個項目中更新它們,但我使用自動生成的引用作爲包裝的模板)。

這是我的包裝看起來像:

class MyServiceClient : System.ServiceModel.ClientBase<IMyService>, 
     IMyService 

它基本上轉發所有的呼叫base.Channel。

現在我們開始考慮實現身份驗證。我們的IIS和控制檯應用程序不保證位於同一個域中,因此Windows驗證不是一個選項。很顯然,我們必須在用於控制檯應用程序的應用程序配置文件中存儲用戶名/密碼,並且WCF將根據我們的用戶數據庫對其進行檢查。

每消息認證似乎有點太流量和資源沉重 - 那麼我們將不得不在每次調用時選擇用戶形式我們的數據庫。我們的控制檯應用程序是計劃任務,他們可能整天運行併發出數千個WCF請求。所以我們需要某種認證的用戶會話。

另外我很擔心如果我的System.ServiceModel.ClientBase意外斷開會發生什麼。目前(沒有任何身份驗證),ClientBase能夠無提示地重新連接,沒有任何問題。我想在添加auth實現後保持相同的行爲。客戶端應該能夠靜默地重新登錄,而不會向調用應用程序拋出任何異常。

據我所知,爲了在WCF中允許所有ASP.NET會話的好處,我必須在ASP.Net兼容模式下運行,並確保每個用戶都有自己的線程和自己的Thread.CurrentPrincipal。但我不知道如何確保如果連接中斷/服務器重新啓動,登錄將自動重新引導。我是否需要爲每個方法調用添加tr..catch,並在出現SecurityException時重新登錄?似乎有點骯髒的解決方案。

現在我可以總結一下兩個問題:

我有IIS WCF服務和控制檯應用程序之間的身份驗證自動恢復原狀會議有哪些選擇?

如何以某種方式實現身份驗證會話,以便我的WCF服務客戶端包裝能夠在斷開連接的情況下恢復/創建新會話?

如果Silverlight不支持的WSHttpBinding和WCF不允許用戶憑據傳遞了basicHttpBinding的(由於安全原因),那我怎麼才能實現我的身份驗證安全的方式? 我找到以下文章: http://www.dotnetcurry.com/ShowArticle.aspx?ID=589 它解釋瞭如何使Silverlight通過自定義綁定來使用SSL,但我不知道如何將我的auth會話放在它中,所以它也可用於控制檯應用程序。

回答

0

您可以使用SSL證書來驗證您的WCF應用程序中的客戶端/服務器。實際上,您可以使用SSL證書來提供傳輸級別的安全性(因此不需要消息加密/解密業務),並且還可以使用該證書對客戶端進行身份驗證,說明它是誰,服務器是誰說的。

這種方法的唯一缺點是您的客戶需要了解您的SSL證書,並根據您的設置,他們可能還需要您的證書副本。

希望這會有所幫助!

相關問題