Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/wcf/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/security/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
WCF-Windows身份验证-安全设置要求匿名_Wcf_Security_Authorization - Fatal编程技术网

WCF-Windows身份验证-安全设置要求匿名

WCF-Windows身份验证-安全设置要求匿名,wcf,security,authorization,Wcf,Security,Authorization,我正在努力让WCF服务在我们服务器上的IIS上运行。部署后,我会收到一条错误消息: 此服务的安全设置需要“匿名”身份验证,但未为承载此服务的IIS应用程序启用此身份验证 我想使用Windows身份验证,因此我禁用了匿名访问。还要注意,有一个aspNetCompatibilityEnabled(如果这有什么区别的话) 这是我的web.config: <system.serviceModel> <serviceHostingEnvironment aspNetCompati

我正在努力让WCF服务在我们服务器上的IIS上运行。部署后,我会收到一条错误消息:

此服务的安全设置需要“匿名”身份验证,但未为承载此服务的IIS应用程序启用此身份验证

我想使用Windows身份验证,因此我禁用了匿名访问。还要注意,有一个aspNetCompatibilityEnabled(如果这有什么区别的话)

这是我的web.config:

<system.serviceModel>
    <serviceHostingEnvironment aspNetCompatibilityEnabled="true" />
    <bindings>
        <webHttpBinding>
            <binding name="default">
                <security mode="TransportCredentialOnly">
                    <transport clientCredentialType="Windows" proxyCredentialType="Windows"/>
                </security>
            </binding>
        </webHttpBinding>
    </bindings>
    <behaviors>
        <endpointBehaviors>
            <behavior name="AspNetAjaxBehavior">
                <enableWebScript />
                <webHttp />
            </behavior>
        </endpointBehaviors>
        <serviceBehaviors>
            <behavior name="defaultServiceBehavior">
                <serviceMetadata httpGetEnabled="true" httpsGetEnabled="false" />
                <serviceDebug includeExceptionDetailInFaults="true" />
                <serviceAuthorization principalPermissionMode="UseWindowsGroups" />
            </behavior>
        </serviceBehaviors>
    </behaviors>
    <services>
        <service name="xxx.Web.Services.RequestService" behaviorConfiguration="defaultServiceBehavior">
            <endpoint behaviorConfiguration="AspNetAjaxBehavior" binding="webHttpBinding"
             contract="xxx.Web.Services.IRequestService" bindingConfiguration="default">
            </endpoint>
            <endpoint address="mex" binding="mexHttpBinding" name="mex" contract="IMetadataExchange"></endpoint>
        </service>
    </services>
</system.serviceModel>


我在互联网上到处搜索,但运气不好。非常感谢您提供任何线索。

所以这似乎是一个非常普遍的问题。关键是要从绑定中删除mex:

<endpoint address="mex" binding="mexHttpBinding" name="mex" contract="IMetadataExchange"></endpoint>

或者,在IIS中启用匿名访问,并在web.config中确保匿名访问被拒绝

希望这能帮助其他灵魂。
(我100%确定我在删除mex的情况下尝试过它。:-O)

是的,看起来需要完全删除mex端点。背景

<serviceMetadata httpGetEnabled="false"/>

光靠自己是行不通的。谢谢

您可以检查这个。 我设法使它按预期工作

<configuration>
  ...
  <system.serviceModel>
    ...
    <bindings>
      <basicHttpBinding>
        <binding>
          <security mode="TransportCredentialOnly">
            <transport clientCredentialType="Windows" />
          </security>
        </binding>
      </basicHttpBinding>
    </bindings>
    ...
  </system.serviceModel>
  ...
</configuration>

...
...
...
...

也只需使用mex的服务绑定即可

因此,请更改当前配置:

<endpoint address="mex" binding="mexHttpBinding" name="mex" contract="IMetadataExchange"></endpoint>


这将解决问题

其他解决方案:

您只需确保服务名称和合同是正确的


希望在某些方面有所帮助。

匿名身份验证可以,并且在某些情况下必须为服务启用,但不能为站点启用

因此,请检查站点的“根”身份验证是否仅启用了Windows身份验证。然后展开您的站点,选择“服务”文件夹,并确保您的服务已启用Windows和匿名身份验证

我有相同的工作环境,这些环境中唯一的区别是服务的身份验证。在我的案例中,问题不是由选定的提供商(Ntlm或协商)引起的,而是由站点和服务的身份验证设置引起的

至少我有与基本MSSQL主数据服务网站和服务相同的错误消息,这就是解决方案。我在运行服务时确实遇到了错误,但站点运行几乎正常,MDS Explorer无法运行,因为服务的身份验证设置起初是错误的。此未完成配置的原因可能是创建新MDS站点时MDS configuration Manager中的错误


因此,在我的例子中,问题不是通过对web.config或ApplicationHost.config文件进行任何特殊编辑来解决的,我没有对配置文件进行任何编辑。刚刚在IIS管理器中为网站及其服务选择了正确的身份验证设置。我不确定这里的情况是否如此,但也许值得一试?

当我删除'mex'端点并将clientCredentialType设置为'Ntlm'时,它对我很有效
我在SharePoint中托管WCF。

看来此MEX绑定问题已在.NET 4.0中修复。将服务器的应用程序池.NET CLR版本从2.0更改为4.0解决了此问题

该问题应确定它使用的是哪个版本的IIS。请参阅我最终使用了您的替代方案。IIS anon+Windows和web.config拒绝所有匿名用户。我正在用asp.net托管3.5 WCF REST。感谢在遵循了我在这里找到的步骤之后,这对我起到了作用:,我从这里被引导到:@Andreythanks获取信息——在这里引用相关信息部分比提供简单的超链接更有帮助。谢谢!这对我来说很有效,但为了清楚起见,我还必须使用basicHttpBinding使
httpGetEnabled=“true”
对我有效。i、 e.将“mex”端点上的绑定从“mexHttpBinding”更改为“basicHttpBinding”
<endpoint address="mex" binding="webHttpBinding" bindingConfiguration="default" name="mex" contract="IMetadataExchange"></endpoint>