.net VS 2008单元测试出现WCF安全错误
我正在使用WCF服务运行我的第一个Visual Studio 2008单元测试,收到以下错误: 试验方法 UnitTest.ServiceUnitTest.TestMyService 引发异常: System.ServiceModel.Security.MessageSecurityException: HTTP请求未经授权 客户端身份验证方案 “匿名”。身份验证标头 从服务器接收到的信息为 “协商,NTLM”。--> System.Net.WebException:远程 服务器返回错误:(401) 未经授权 我还在安全日志中获得以下失败的审核: 登录失败:原因:用户已登录 未被授予请求的登录权限 在此计算机上键入.net VS 2008单元测试出现WCF安全错误,.net,wcf,unit-testing,authentication,.net,Wcf,Unit Testing,Authentication,我正在使用WCF服务运行我的第一个Visual Studio 2008单元测试,收到以下错误: 试验方法 UnitTest.ServiceUnitTest.TestMyService 引发异常: System.ServiceModel.Security.MessageSecurityException: HTTP请求未经授权 客户端身份验证方案 “匿名”。身份验证标头 从服务器接收到的信息为 “协商,NTLM”。--> System.Net.WebException:远程 服务器返回错误:(40
用户 姓名:(互联网客户账户)
域:
登录类型:3
登录过程:IIS
身份验证包:
微软认证软件包V1\u 0
工作站名称: 我正在Windows XP SP3计算机上的IIS 6.0中托管WCF服务。我已检查WCF服务虚拟目录的“匿名访问”和“集成Windows身份验证” 以下是我的服务配置文件:
<system.serviceModel>
<services>
<bindings>
<basicHttpBinding>
<binding name="MyBinding">
<security mode="None" />
</binding>
</basicHttpBinding>
<customBinding>
<binding name="MyBinding">
<transactionFlow />
<textMessageEncoding />
<httpsTransport authenticationScheme="Ntlm"/>
</binding>
</customBinding>
<wsHttpBinding>
<binding name="MyBinding">
<security mode="None" />
</binding>
</wsHttpBinding>
</bindings>
<service
behaviorConfiguration="Service1Behavior"
name="Service1"
>
<endpoint
address=""
binding="wsHttpBinding"
bindingConfiguration="MyBinding"
contract="IService1"
>
<identity>
<dns value="localhost" />
</identity>
</endpoint>
</service>
</services>
<behaviors>
<serviceBehaviors>
<behavior name="Service1Behavior">
<serviceMetadata httpGetEnabled="true" />
<serviceDebug includeExceptionDetailInFaults="false" />
</behavior>
</serviceBehaviors>
</behaviors>
</system.serviceModel>
默认身份验证是windows(或NTLM),因此您需要在配置文件中指定不需要身份验证
<system.serviceModel>
<bindings>
<wsHttpBinding>
<binding name="myBinding">
<security mode="None" />
</binding>
</bindings>
</system.serviceModel>
binding元素指定对wsHttpBinding的标准行为的修改
然后端点上的“bindingConfiguration=“myBinding”属性表示该端点应使用我们指定的修改。当绑定中有securityMode=“None”时,应关闭集成身份验证。我必须更改以下IIS和WCF服务配置以通过“协商,NTLM”“例外 IIS配置: --未选中“匿名访问”复选框并选中“集成 中的“Windows身份验证”复选框 服务器的目录安全设置 WCF服务虚拟目录 WCF服务: --实现了basicHttpBinding并配置了basicSettingBinding 安全设置为 “仅限运输凭证”模式和 TransportClientCredentialType到 “窗口” 以下是我更新的wcf服务配置:
<system.serviceModel>
<bindings>
<basicHttpBinding>
<binding name="windowsBasicHttpBinding">
<security mode="TransportCredentialOnly">
<transport clientCredentialType="Windows" />
</security>
</binding>
</basicHttpBinding>
</bindings>
<services>
<service
behaviorConfiguration="CityOfMesa.ApprovalRouting.WCFService.RoutingServiceBehavior"
name="CityOfMesa.ApprovalRouting.WCFService.RoutingService"
>
<endpoint
binding="basicHttpBinding" bindingConfiguration="windowsBasicHttpBinding"
name="basicEndPoint"
contract="CityOfMesa.ApprovalRouting.WCFService.IRoutingService"
/>
</service>
</services>
<behaviors>
<serviceBehaviors>
<behavior
name="CityOfMesa.ApprovalRouting.WCFService.RoutingServiceBehavior"
>
<serviceMetadata httpGetEnabled="true" />
<serviceDebug includeExceptionDetailInFaults="true" />
</behavior>
</serviceBehaviors>
</behaviors>
</system.serviceModel>
作为旁注…..有一个GPO设置“NTLM身份验证级别”,它控制身份验证,导致单元测试生成“协商,NTLM”异常 更新到安全模式仍然不起作用…我甚至在服务节点.k中添加了bindingName属性,并尝试启用消息安全性和凭据none。还降低了我对解决方案是否有效的把握还添加了bindingConfiguration属性以添加到endpoint元素当我尝试更新服务引用时,收到以下消息:“未提供servrice证书。请在ServiceCredentials中指定服务证书”我尝试了此操作,并在尝试更新测试项目中的服务引用时收到以下错误:元数据包含无法解析的引用“”。HTTP请求未经客户端身份验证方案“匿名”授权。从serCan接收到的Authentication头可以浏览到WSDL吗?如果禁用集成身份验证并启用匿名身份验证,并且在客户端和服务器上都具有SecurityMode=“None”,则应该可以正常工作。请检查计算机上的本地安全策略,并确保匿名用户未被锁定,无法访问网络。最可能的问题是机器的AD组策略或本地安全策略。我还在web应用程序和控制台应用程序中运行此服务,并收到相同的“远程服务器返回错误:(401)未经授权”对于这两个测试,@alhambraeidos-我不确定您想问的是关于RoutingService行为的什么问题
<system.serviceModel>
<bindings>
<basicHttpBinding>
<binding name="windowsBasicHttpBinding">
<security mode="TransportCredentialOnly">
<transport clientCredentialType="Windows" />
</security>
</binding>
</basicHttpBinding>
</bindings>
<services>
<service
behaviorConfiguration="CityOfMesa.ApprovalRouting.WCFService.RoutingServiceBehavior"
name="CityOfMesa.ApprovalRouting.WCFService.RoutingService"
>
<endpoint
binding="basicHttpBinding" bindingConfiguration="windowsBasicHttpBinding"
name="basicEndPoint"
contract="CityOfMesa.ApprovalRouting.WCFService.IRoutingService"
/>
</service>
</services>
<behaviors>
<serviceBehaviors>
<behavior
name="CityOfMesa.ApprovalRouting.WCFService.RoutingServiceBehavior"
>
<serviceMetadata httpGetEnabled="true" />
<serviceDebug includeExceptionDetailInFaults="true" />
</behavior>
</serviceBehaviors>
</behaviors>
</system.serviceModel>