REST服务的WCF Windows身份验证问题

时间:2012-02-03 19:32:44

标签: wcf windows-authentication wcf-rest webhttpbinding

我在设置WCF服务以在Windows身份验证下运行时遇到一些困难。该服务仅通过使用ajax的jQuery来使用。

IIS(服务器2003上的版本6)设置为仅允许Windows身份验证。

web.config具有<authentication mode="Windows" />标记。

这是web.config的服务部分:

<system.serviceModel>
<behaviors>
  <endpointBehaviors>
    <behavior name="AspNetAjaxBehavior">
        <webHttp />
    </behavior>
  </endpointBehaviors>
    <serviceBehaviors>
        <behavior name="ServiceBehavior">
            <serviceMetadata httpGetEnabled="true"/>
        </behavior>
    </serviceBehaviors>
</behaviors>
<serviceHostingEnvironment aspNetCompatibilityEnabled="true"/>
<services>
    <service name="SearchService" behaviorConfiguration="ServiceBehavior">
        <endpoint address="http://localhost:9534/SearchService.svc" behaviorConfiguration="AspNetAjaxBehavior"
            binding="webHttpBinding" bindingConfiguration="webWinBinding"
            name="searchServiceEndpoint" contract="MyApp.Services.ISearchService">
        </endpoint>
    </service>
</services>
<bindings>
    <webHttpBinding>
        <binding name="webWinBinding" maxBufferSize="2147483647" maxReceivedMessageSize="2147483647">
            <security mode="TransportCredentialOnly">
                <transport clientCredentialType="Windows"/>
            </security>
            <readerQuotas maxArrayLength="100000" maxStringContentLength="2147483647" />
        </binding>
    </webHttpBinding>
</bindings>

界面如下所示:

[ServiceContract(Namespace = "http://MyService.ServiceContracts/2012/02", Name = "SearchService")]
public interface ISearchService
{
    [WebGet(ResponseFormat = WebMessageFormat.Json, BodyStyle = WebMessageBodyStyle.Bare, UriTemplate = "GetSomeData?filter={filter}")]
    [OperationContractAttribute(Action = "GetSomeData")]
    string GetSomeData(string filter);
}

实施:

[ServiceBehavior(IncludeExceptionDetailInFaults = true)]
[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Required)]
public class SearchService : ISearchService
{
    public string GetSomeData(string filter)
    {
        // Call Database and get some results
        // return the results
        return "";
    }
}

当我在Internet Explorer中导航到该服务时,它会提示我输入用户名和密码,尽管已启用Windows身份验证。

只要我启用匿名身份验证,服务加载就好了,一切正常。问题是,我在Web应用程序中还有其他需要关闭匿名的事情。

我在网上搜索过,找不到任何关于这个问题的内容。

0 个答案:

没有答案