【发布时间】:2011-05-09 22:15:24
【问题描述】:
我有一个带有表单身份验证的标准 ASP.NET MVC 站点。 用户通过网页登录。然后他们可以访问一个 Silverlight 应用程序。当他们登录时,我向他们传递了一个表单身份验证 cookie,就像任何其他网站一样:
FormsAuthentication.SetAuthCookie(userName, createPersistentCookie);
XAP 文件位于 ~/ClientBin/ 文件夹中。 SVC 文件位于 ~/Services/ 文件夹中。匿名访问被阻止:
<configuration>
<system.web>
<authorization>
<deny users="?"/>
</authorization>
</system.web>
</configuration>
对 SVC 的 Silverlight 调用导致 HTTP 302 弹回登录页面,并使 Silverlight 崩溃。 :( 这只发生在禁用匿名访问时。我认为 Silverlight 不会将 cookie 与 WCF 服务调用一起传递。为什么不呢?
我确保使用文档 (http://msdn.microsoft.com/en-us/library/dd560702(VS.95).aspx) 中定义的 AspNetCompatibilityRequirements:
[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Required)]
public class TaskSchedulerService : ITaskSchedulerService
{
我的 web.config 有
<serviceHostingEnvironment aspNetCompatibilityEnabled="true"
multipleSiteBindingsEnabled="true" />
</system.serviceModel>
使用启用 BinaryCompression 的 basicHttpBinding 或 customBinding 也会发生同样的情况。
【问题讨论】:
-
在 firefox 中使用 firebug 检查您的站点,是否有 asp.net auth cookie 正在为 WCF 请求传输。
-
你是对的。没有为请求传输身份验证 cookie!我希望在重定向之前有一个 HTTP 401 响应!为什么 silverlight 不发送 auth cookie?
-
cookie 传输是通过浏览而不是 SL 应用程序完成的。这可能是一个不同的域问题。 cookie 可能被指定用于与 WCF 服务不同的域。检查您的 MVC 应用程序 url 和 WCF url。还要检查 cookie 是否正在 MVC 应用程序中传输。
标签: asp.net-mvc wcf silverlight-4.0 forms-authentication