![](/img/trans.png)
[英]Silverlight+ASP.NET MVC+ Forms Authentication = no authentication in the WCF
[英]Silverlight, SSL, HTTPS, WCF, MVC, and Forms Authentication
我有一個使用窗體身份驗證的MVC 3網站。 用戶登錄並導航到Silverlight 5應用程序。 Silverlight應用程序正在另一個端口上調用啟用Silverlight的WCF服務。 因為我的要求之一是使用Https / SSL,所以我決定將WCF服務移到我的MVC應用程序中的“服務”文件夾中。
要查看服務是否正常運行,我輸入了服務地址。 我收到一條錯誤消息,指出我的服務需要匿名訪問,但是該網站被指定為使用表單身份驗證。 因此,我在服務的web.config中刪除了mexHttpBinding,並向綁定的httpTransport添加了authenticationScheme =“ Negotiate”。 (我還沒去https)。
現在,我得到302,並被重定向到登錄頁面。 看來我的服務提示我尚未登錄。因此,我添加了
routes.IgnoreRoute("{resource}.svc/{*pathInfo}");
和
routes.IgnoreRoute("Services/");
但這並沒有改變。 我認為該服務說我未通過身份驗證,但是我確定是的。
有人可以解釋我在做什么錯嗎?
當我在本地主機上調試時,所有這些工作正常,但是當部署到服務器時,我無法訪問該服務。
編輯
我可能已經找到了答案。 我在IIS中打開了對我的網站的匿名訪問,並將httpTransport的authenticationScheme更改為默認值(匿名)。 然后我加了
<authorization>
<deny users="?"/>
</authorization>
隨着
<authentication mode="Forms">
<forms loginUrl="~/Account/LogOn" timeout="2880" />
</authentication>
這似乎要求對用戶進行身份驗證才能訪問服務。 我現在要檢查我的silverlight應用程序,以確保它可以到達服務並獲取/發布數據。 所有這些都在測試應用程序中,因此我必須相應地更改實際的應用程序。 然后,我將解決ssl / https。
所有這些聽起來對嗎?
編輯2
我必須確保已啟用mex並將aspNetCompatibilityEnabled設置為“ false”,以便在我的silverlight應用程序中更新合同。 但是在更新我的服務之后,我將aspNetCompatibilityEnabled設置為“ true”,並且一切似乎都可以正常工作。
我希望我仍然朝着正確的道路前進...
我最終設置了IIS,以將Web服務添加為父網站下的網站。 然后,我使用父站點的web.config中的Location標記在Web服務上實現表單身份驗證。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.