无法在本地计算机上运行WCF服务

5
我有一个WCF服务,只有将其部署到服务器并通过IIS进行配置后才能正常工作。当我通过IIS Express运行它时,出现以下错误信息:
“主机上配置的身份验证方案('Ntlm、Anonymous')不允许在绑定('BasicHttpBinding')上配置的身份验证方案('Negotiate')。请确保SecurityMode设置为Transport或TransportCredentialOnly。此外,可以通过IIS管理工具更改此应用程序的身份验证方案,通过ServiceHost.Authentication.AuthenticationSchemes属性,在应用程序配置文件中的元素上更新binding的ClientCredentialType属性,或者通过调整HttpTransportBindingElement上的AuthenticationScheme属性来解决此问题。”
我的web.config服务绑定如下:
 <services>
      <service name="LMS.Services.Services.AppService" behaviorConfiguration="LargeDataRequestBehavior">
        <endpoint address="" binding="basicHttpBinding" bindingConfiguration="basicHttp_LargeDataRequestBinding" contract="LMS.Services.Services.AppService" />
        <endpoint address="mex" binding="basicHttpBinding" bindingConfiguration="basicHttp_LargeDataRequestBinding" contract="IMetadataExchange" />
      </service> </services>

我的绑定看起来像这样:

   <bindings>
      <basicHttpBinding>
        <binding name="basicHttp_LargeDataRequestBinding" receiveTimeout="01:00:00" sendTimeout="01:00:00" maxBufferSize="2147483647" maxBufferPoolSize="2147483647" maxReceivedMessageSize="2147483647" messageEncoding="Text">
          <readerQuotas maxDepth="2147483647" maxStringContentLength="2147483647" maxArrayLength="2147483647" maxBytesPerRead="2147483647" maxNameTableCharCount="2147483647" />          
          <security mode="TransportCredentialOnly">
            <transport clientCredentialType="Windows" proxyCredentialType="None" realm="" >              
            </transport>
            <message clientCredentialType="UserName" algorithmSuite="Default" />
          </security>
        </binding>
      <basicHttpBinding>
    </bindings>

非常感谢任何帮助。

2个回答

7
尝试更改此部分。问题在于凭据类型 Windows 的枚举映射到一个称为 Negotiate 的协议。IIS 告诉您,在您的网站上未启用 Negotiate,只允许使用基本身份验证(无安全性)和 Ntlm(另一种 Windows 安全性形式)。
<bindings>
  <basicHttpBinding>   
    <binding>      
      <security >
        <transport clientCredentialType="Ntlm" >              
        </transport>
      </security>
    </binding>
  </basicHttpBinding>
</bindings>

这里的问题在于“Negotiate”和“Windows”之间存在不匹配。

这确实让它运行了,但在调用Silverlight包的代理服务上引发了另一个问题。我现在收到以下错误消息:由于终结点分派程序处的契约过滤器不匹配,Action“urn:AppService/GetTemplatesByCategory”的消息无法在接收器上处理。这可能是由于发送器和接收器之间的契约不匹配(发送器和接收器之间的操作不匹配)或发送器和接收器之间的绑定/安全性不匹配所致。请检查发送器和接收器是否具有相同的契约和相同的绑定(包括安全要求,例如Message、Transport、None)。 - greektreat
不用在意我上次的评论,是我误操作把服务的URL在客户端中改变了! - greektreat
嗨,Aron。在 basicHttpBinding 结尾的标签中缺少“/”。这个笔误导致 XML 无效。SO 不允许我进行单字符编辑,否则我会自己修复它。 - 15ee8f99-57ff-4f92-890c-b56153

1

在我的情况下,按照以下方式更新IIS 身份验证设置即可解决问题:

  • 匿名身份验证:禁用
  • Windows身份验证:启用

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接