使用简单的测试 Wcf 服务使用基本身份验证时遇到一些问题。我遇到了一个例外:
无法激活请求的服务“http://qld-tgower/test/Service.svc”。有关详细信息,请参阅 > 服务器的诊断跟踪日志。
在跟踪日志中它显示:
在主机('Basic')上配置的身份验证方案不允许在绑定'BasicHttpBinding'('Anonymous')上配置的身份验证方案。请确保将 SecurityMode 设置为 Transport 或 TransportCredentialOnly。此外,这可以通过 IIS 管理工具更改此应用程序的身份验证方案来解决,通过 ServiceHost.Authentication.AuthenticationSchemes 属性,在应用程序配置文件中的 <serviceAuthenticationManager> 元素,通过更新绑定上的 ClientCredentialType 属性,或通过调整 HttpTransportBindingElement 上的 AuthenticationScheme 属性。
但是当我使用不正确的用户名和密码时,我不明白它说它正在使用基本身份验证?
HTTP 请求未经客户端身份验证方案“基本”授权。从服务器收到的身份验证标头是“Basic realm="qld-tgower"”。
这是我的 web.config 详细信息
<system.serviceModel>
<services>
<service name="WcfService"
behaviorConfiguration="Behavior">
<endpoint address="http://QLD-TGOWER/test/Service.svc"
binding="basicHttpBinding"
bindingConfiguration="httpBinding"
contract="IService" />
</service>
</services>
<diagnostics>
<endToEndTracing activityTracing="false" messageFlowTracing="true" propagateActivity="true"></endToEndTracing>
</diagnostics>
<bindings>
<basicHttpBinding>
<binding name="httpBinding">
<security mode="TransportCredentialOnly">
<transport clientCredentialType="Basic" proxyCredentialType="Basic">
</transport>
</security>
</binding>
</basicHttpBinding>
</bindings>
<behaviors>
<serviceBehaviors>
<behavior>
<!-- To avoid disclosing metadata information, set the value below to false and remove the metadata endpoint above before deployment -->
<serviceMetadata httpGetEnabled="true"/>
<!-- To receive exception details in faults for debugging purposes, set the value below to true. Set to false before deployment to avoid disclosing exception information -->
<serviceDebug includeExceptionDetailInFaults="true"/>
</behavior>
</serviceBehaviors>
</behaviors>
<serviceHostingEnvironment multipleSiteBindingsEnabled="true"/>
</system.serviceModel>
这是我的 App.config
<system.serviceModel>
<diagnostics>
<endToEndTracing activityTracing="true" />
<messageLogging logMessagesAtTransportLevel="true" />
</diagnostics>
<bindings>
<basicHttpBinding>
<binding name="BasicHttpBinding_IService" >
<security mode="TransportCredentialOnly">
<transport clientCredentialType="Basic" proxyCredentialType="Basic"></transport>
<message clientCredentialType="UserName" />
</security>
</binding>
</basicHttpBinding>
</bindings>
<client>
<endpoint address="http://QLD-TGOWER/test/Service.svc" binding="basicHttpBinding"
bindingConfiguration="BasicHttpBinding_IService" contract="ServiceReference1.IService"
name="BasicHttpBinding_IService" />
</client>
</system.serviceModel>
我的测试应用
private static void Main(string[] args)
{
var proxy = new ServiceClient("BasicHttpBinding_IService");
var clientCredentials = proxy.ClientCredentials;
clientCredentials.UserName.UserName = "username";
clientCredentials.UserName.Password = "password";
var res = proxy.GetData(1);
Console.WriteLine(res);
Console.WriteLine("Done");
Console.ReadKey(true);
}
还有我的服务
public class Service : IService
{
public string GetData(int value)
{
return string.Format("You entered: {0}", value);
}
}
我在这里缺少什么吗?