Có một số sự cố khi sử dụng xác thực cơ bản với dịch vụ Wcf thử nghiệm đơn giản. Tôi nhận được ngoại lệ:Wcf Xác thực cơ bản
Dịch vụ được yêu cầu, 'http: //qld-tgower/test/Service.svc' không thể kích hoạt được. Xem nhật ký theo dõi chẩn đoán của máy chủ để biết thêm thông tin.
Và trong trace log nó cho thấy:
Các lược đồ xác thực cấu hình trên máy chủ ('cơ bản') không cho phép những cấu hình trên các ràng buộc 'BasicHttpBinding' ('Anonymous'). Hãy đảm bảo rằng SecurityMode được đặt thành Transport hoặc TransportCredentialOnly. Ngoài ra, điều này có thể được giải quyết bằng cách thay đổi lược đồ xác thực cho ứng dụng này thông qua công cụ quản lý IIS, thông qua thuộc tính ServiceHost.Authentication.AuthenticationSchemes, trong tệp cấu hình ứng dụng tại phần tử <serviceAuthenticationManager>, bằng cách cập nhật thuộc tính ClientCredentialType trên ràng buộc, hoặc bằng cách điều chỉnh thuộc tính AuthenticationScheme trên HttpTransportBindingElement.
Nhưng những gì tôi không hiểu khi tôi sử dụng tên người dùng và mật khẩu không chính xác, nó cho biết IS sử dụng xác thực cơ bản?
Yêu cầu HTTP không được ủy quyền với lược đồ xác thực ứng dụng khách 'Cơ bản'. Tiêu đề xác thực nhận được từ máy chủ là 'Basic realm = "qld-tgower"'.
Đây là chi tiết web.config của tôi
<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>
và đây là App.config tôi
<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>
ứng dụng thử nghiệm của tôi
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);
}
Và dịch vụ của tôi
public class Service : IService
{
public string GetData(int value)
{
return string.Format("You entered: {0}", value);
}
}
Có một cái gì đó mà tôi đang thiếu ở đây?
Cảm ơn, Điều đó đã sửa lỗi xác thực, nhưng bây giờ dịch vụ chỉ đi vào trạng thái bị lỗi. Không có gì trong nhật ký theo dõi để cho biết lý do. – TheRealTy