我有一個現有的ASP.NET應用程序,它實現了整個窗體身份驗證。該應用程序部署在多個實例中(例如,customer1,customer2,test,dev等),每個實例具有單獨的數據庫。 SSL正在發揮作用。實例配置通過XML配置文件。窗體身份驗證應用程序中的ASP.NET Web服務
我有一個新的要求,允許上傳/下載某些數據,我希望將其作爲公共Web服務來實現。
我最初的想法是選擇性地禁用應用程序的子目錄(例如〜/ Services)的表單認證,然後通過SOAP頭或類似的方法進行認證。
但是,我沒有找到一種方法來選擇性地禁用窗體身份驗證。
問:有沒有辦法做到這一點?我試過<位置>在web配置標記無濟於事。
如果不是的話,你有什麼建議如何設置?我可以考慮以下選項:
1)在我的解決方案中創建一個新的「Services」項目,然後在每個實例的該目錄中配置一個單獨的IIS ASP.NET應用程序。 (Pro:輕鬆訪問實例配置,這可能在未來需要Con:每個相關實例的配置負擔)。
2)創建一個單獨的「服務」解決方案,從應用程序解決方案中引用需要的程序集,並將其作爲獨立的ASP.NET應用程序託管。然後,根據SOAP Header中提供的用戶名查找數據庫連接字符串。 (Pro:在IIS中配置單個應用程序Con:不能輕鬆訪問實例配置)
3)??
說明:我在這裏看到了答案:Override ASP.NET forms authentication for a single page,但是使用位置標記並沒有幫助(Web服務的請求仍然被重定向)。在我的web.config的有關部分是這樣的:
<system.web>
<authentication mode="Forms">
<forms loginUrl="Login.aspx"/>
</authentication>
<authorization>
<deny users="?"/>
<allow users="*"/>
</authorization>
</system.web>
<location path="~/Services/MyService.asmx">
<system.web>
<authentication mode="None" />
<authorization>
<allow users="*" />
</authorization>
</system.web>
</location>
每當我在web.config中使用位置標記時,路徑的形式是「Services/MyService.asmx」,而不是「〜/ Services/MyService.asmx」它沒有波浪斜線? – 2009-07-12 23:37:51
就是這樣。我可以發誓我曾嘗試過3種不同的版本。這一次,我關閉了瀏覽器,您的解決方案完美運行。 – dividius 2009-07-12 23:45:33