身份验证模式=“表单”导致WCF服务中的重定向

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了身份验证模式=“表单”导致WCF服务中的重定向相关的知识,希望对你有一定的参考价值。

我的.NET 4.0 Web应用程序项目中有一个WCF端点。使用VS2010 WCF测试客户端,我可以正确连接到服务。但是,当我去使用该服务时,我收到一般错误消息:

内容类型text / html; charset =响应消息的UTF-8与绑定的内容类型不匹配(text / xml; charset = utf-8)。如果使用自定义编码器,请确保正确实现IsContentTypeSupported方法。响应的前1024个字节是:

当我查看IIS Express上的请求时,我得到以下内容:

请求已开始:POST http://machinename:port/Services/Services.svc

请求开始:GET http://machinename:port/Services/Services.svc?AspxAutoDectectCookieSupport=1

请求开始:GET http://machinename:port/(X(1)A(LKwosYYszAEkAAAAMDE2YzlmNWItNTZIOS00ZDY1LTgzOTAtNDIxNDgyOWZIYWViJ86TX46muUQoL_psmkZK2rgWbO41))/Services/Services.svc?AspxAutoDectectCookieSupport=1

请求已结束:“http:// machinename:port / Services / Services.svc”,HTTP状态为302.0

请求已结束:“http:// machinename:port / Services / Services.svc?AspxAutoDectectCookieSupport = 1”,HTTP状态为302.0

请求已结束:“http:// machinename:port / Services / Services.svc?AspxAutoDectectCookieSupport = 1”,HTTP状态为200.0

因此,在POST到服务之后,它似乎被重定向到服务的标准网页。然而,当我删除:

<authentication mode="Forms">
<forms cookieless="AutoDetect" loginUrl="~/Security/LoginClient.aspx" name="FORMAUTH" />

从web.config它的工作原理。有什么想法发生了什么?我试图从身份验证中删除该服务所在的文件夹(http://stackoverflow.com/questions/5593720/authentication-mode-forms-causing-errors-in-wcf-end-point),但问题仍然存在。

虽然当我通过IIS Express 7.5运行它时使用Visual Studio开发服务器(Cassini),但无论是否使用身份验证,都会发生相同的错误。

答案

您必须提供在web.config中匿名联系的Web服务的授权:

<location path="MyWebServices">
    <system.web>
        <authorization>
            <allow users="*"/>
        </authorization>
    </system.web>
</location>

这假设您将所有服务保存在相对于应用程序根目录的名为MyWebServices的文件夹中。您必须允许*或它将强制登录访问。

另一答案

我在服务地址中使用machinename而不是localhost时遇到同样的问题。我确实尝试使用“baseAddressPrefixFilters”但没有成功。

<serviceHostingEnvironment>
  <baseAddressPrefixFilters>
    <add prefix="http://XLSiteSampleD.aginsurance.intranet/PIXLSiteSample" />
  </baseAddressPrefixFilters>
</serviceHostingEnvironment>

我认为该选项可能是在web.config中使用服务上的相关属性启用aspNetCompatibility:[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]但是不是诀窍:(

它只适用于没有域而没有baseAddressPrefixFilters的http://localhost/VirtualSite/MyService.svc这样的地址!

V.

以上是关于身份验证模式=“表单”导致WCF服务中的重定向的主要内容,如果未能解决你的问题,请参考以下文章

表单身份验证、ASP.NET MVC 和 WCF RESTful 服务

Django 身份验证 - 错误的重定向 url 到登录页面

Laravel - 具有多重身份验证的未经身份验证的重定向问题

Wordpress 登录表单验证

使用 WCF 的身份验证服务

从 ASP.NET 应用程序验证 WCF 服务