我有一个使用表单身份验证的 MVC 3 网站。用户登录并导航到 Silverlight 5 应用程序。Silverlight 应用正在另一个端口上调用启用 Silverlight 的 WCF 服务。因为我的要求之一是使用 Https/SSL,所以我决定将 WCF 服务移动到我的 MVC 应用程序中的“服务”文件夹中。
要查看该服务是否正常工作,我输入了我的服务地址。我收到一条错误消息,指出我的服务需要匿名访问,但该网站被指定为使用表单身份验证。因此,我在我的服务的 web.config 中删除了 mexHttpBinding,并将 authenticationScheme="Negotiate" 添加到我的绑定的 httpTransport 中。(我还没到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>
which seems to be requiring the user to be authenticated in order to access the service. I am now going to check my silverlight application to make sure it can reach the service and get/post data. This was all in a test application, so I'll have to change my real application accordingly. Then, I'll tackle ssl/https.
Does all this sound right?
EDIT 2
I had to ensure mex was enabled and aspNetCompatibilityEnabled was set to 'false' to get the conctracts to update in my silverlight app. But after updating my services, I set the aspNetCompatibilityEnabled to 'true', and everything appears to be working.
I hope I'm still headed down the right path...