2011-06-23 48 views
0

我想對在IIS中有相應的虛擬目錄承載相同的服務,爲多個客戶指定的應用程序名稱。所以基本上不會在磁盤上的一個服務,將被託管的虛擬目錄多個IIS引用,這會給我一些事情是這樣的:爲WCF認證

http://myservice/client1

http://myservice/client2

...等

我會把服務合同概括一下。這會給我所有客戶的合同。

底層數據庫對於所有客戶端來說都是不同的(架構是相同的),我將通過從用於訪問服務的URL中找出連接到客戶端的相應數據庫,如果它是http://myservice/client1我將連接到dbClient1,如果它是http://myservice/client2我將連接到dbClient2 ...等

挑戰:

上面會解決大部分的問題,除了認證過程(我用ASP成員,窗體身份驗證)。我的服務是基於https basicHttp綁定,所以我沒有會話。

如何指定用於用戶身份驗證什麼應用程序名稱。 (所有客戶都有獨立的應用程序名稱,存儲在一個ASP會員數據庫)如果我在Global.asax中Application_AuthenticateRequest下改變,它的工作,我可以在那個時候得到的URL,並指定應用程序的名稱,而認證,所用,但這種改變對其他調用應用程序的名稱,以及...這是不好的,在所有....

因此,所有我需要的是某種方式,這個應用程序在告訴我的服務,尋找這個用戶名/密碼數據庫。 (在認證情況下,數據庫對於所有客戶端都是相同的)。但我想的應用程序名稱爲特定會話/實例的變化......(不知道這兩位是在HTTPS basicHttp結合可用)

如果我能解決這個問題我會在所有的好....

請大家幫忙......謝謝

回答

0

看來你使用ASP.NET基礎設施進行驗證。你使用的是什麼類型的會員供應商?您需要編寫一個自定義提供程序,使用當前請求url來計算應用程序名稱。例如,這裏是基於SqlMembershipProvider的那個:

public class MyMembershipProvider : SqlMembershipProvider 
{ 

    public override string ApplicationName 
    { 
     get 
     { 
      var url = HttpContext.Current.Request.Url; 
      // find out the application name from url 
     } 
     set 
     { 
     base.ApplicationName = value; 
     } 
    } 
} 
+0

你好我想我使用的是ASP.NET Membership Provider。我在哪裏編寫你上面建議的代碼? (對不起,我從來沒有這樣做過...)加上發生了什麼事情,我已經設置了應用程序名稱,會員供應商和東西在我的web.config ...我想你是什麼建議,我必須寫一些地方否則......如果是這種情況,你可以讓我知道我在哪裏寫這個...或者我完全在說廢話...... !!! – user402186

+0

其SqlMembershipProvider的 – user402186

+0

嘿,我想我什麼ü意思...謝謝... – user402186