1

我有一个使用表单身份验证的 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...

4

1 回答 1

1

I ended up setting up IIS to add the webservice as a website under the parent website. Then, I used the Location tag in the parent site's web.config to implement forms authentication on the webservice.

于 2012-07-19T22:21:42.917 回答