0

我有一个托管在 IIS 网站中的 WCF 服务,带有表单身份验证。该服务具有[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Required)] 属性,并且 Web 配置具有这一行:<serviceHostingEnvironment aspNetCompatibilityEnabled="true" />

服务被称为带有 $.ajax() 调用的表单页面。一切正常,直到用户在他的 cookie 过期后调用服务。在这种情况下,会出现“Windows 安全”窗口,提示用户应输入登录名和密码才能访问该服务。如果用户只是关闭窗口而不做任何事情,页面将被重定向到登录页面(这是正确的)

问题:如何跳过此窗口并立即进行重定向?我猜想配置 WCF 服务有些问题,我尝试了一些绑定方案 - 但我无法逃脱这个窗口。

WCF服务的配置:

 <system.serviceModel>
<behaviors>
  <serviceBehaviors>
    <behavior name="metadataAndDebug">
      <serviceMetadata httpGetEnabled="true" httpGetUrl=""/>
      <serviceDebug includeExceptionDetailInFaults="true" />
    </behavior>
  </serviceBehaviors>
  <endpointBehaviors>
    <behavior name="Project.Service.DataServiceAspNetAjaxBehavior">
      <enableWebScript/>
    </behavior>
  </endpointBehaviors>
</behaviors>
<serviceHostingEnvironment aspNetCompatibilityEnabled="true" multipleSiteBindingsEnabled="true" />
<services>
  <service name="Project.Service.DataService" behaviorConfiguration="metadataAndDebug" >
    <endpoint address="" behaviorConfiguration="Project.Service.DataServiceAspNetAjaxBehavior"
      binding="webHttpBinding" contract="Project.Service.DataService" />
  </service>
</services>

4

1 回答 1

0

自动重定向功能默认开启。

如果出于某种原因,您想关闭此功能,您可以注册一个消息检查器来执行此操作。

public class MyMessageInspector : IDispatchMessageInspector
{
    internal const string RedirectPropertyName = "WebHttpRedirect";
    public object AfterReceiveRequest(ref System.ServiceModel.Channels.Message request, IClientChannel channel, InstanceContext instanceContext)
    {
        // remove the RedirectPropertyName from the request
        if ( request.Properties.ContainsKey(RedirectPropertyName))
        {
            request.Properties.Remove(RedirectPropertyName);
        }
        return null;
    }
    public void BeforeSendReply(ref System.ServiceModel.Channels.Message reply, object correlationState)
    {

    }
}
于 2013-04-23T08:30:25.967 回答