身份验证模式=“表单”导致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
请求已结束:“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 到登录页面