У меня большая проблема с пользовательской аутентификацией имени пользователя в WCF. Я сделал простой Сервис WCF, который нуждается в проверке пользователей через CustomUserValidator. Когда я вхожу в консольное приложение, как это:
using (var svc = new ServiceReference2.DBServiceClient())
{
Console.WriteLine("Username: ");
string user = Console.ReadLine();
Console.WriteLine("Pass: ");
string pass = Console.ReadLine();
svc.ClientCredentials.UserName.UserName=user;
svc.ClientCredentials.UserName.Password=pass;
Console.WriteLine(svc.GetAllDepartmentList().First().DepartmentID);
Console.Read();
}
Все хорошо, но когда я хочу использовать свой GUI Client, который по сути дела делает то же самое, у меня появляется ошибка:
Внешнее исключение:
Невозможно открыть защищенный канал, так как сбой согласования безопасности с удаленной конечной точкой. Это может быть связано с отсутствием или неправильным указанием EndpointIdentity в EndpointAddress, используемом для создания канала. Убедитесь, что EndpointIdentity, указанный или подразумеваемый в EndpointAddress, правильно идентифицирует удаленную конечную точку.
Внутреннее исключение:
Запрос токена безопасности содержит недопустимые или неправильно сформированные элементы.
Запись app.config для них обоих идентична:
<system.serviceModel>
<bindings>
<wsHttpBinding>
<binding name="WSHttpBinding_IDBService"
closeTimeout="00:01:00" openTimeout="00:01:00"
receiveTimeout="00:10:00" sendTimeout="00:01:00"
bypassProxyOnLocal="false" transactionFlow="false"
hostNameComparisonMode="StrongWildcard"
maxBufferPoolSize="524288" maxReceivedMessageSize="65536"
messageEncoding="Text" textEncoding="utf-8" useDefaultWebProxy="true"
allowCookies="false">
<readerQuotas maxDepth="32" maxStringContentLength="8192"
maxArrayLength="16384" maxBytesPerRead="4096"
maxNameTableCharCount="16384" />
<reliableSession ordered="true"
inactivityTimeout="00:10:00" enabled="false" />
<security mode="Message">
<transport clientCredentialType="Windows"
proxyCredentialType="None" realm="" />
<message clientCredentialType="UserName"
negotiateServiceCredential="true" algorithmSuite="Default" />
</security>
</binding>
</wsHttpBinding>
</bindings>
<client>
<endpoint name="WSHttpBinding_IDBService"
address="http://localhost:8732/Design_Time_Addresses/DBService/Service1/"
binding="wsHttpBinding"
bindingConfiguration="WSHttpBinding_IDBService"
contract="ServiceReference2.IDBService" >
<identity>
<dns value="localhost" />
</identity>
</endpoint>
</client>
</system.serviceModel>
Спасибо за вашу помощь!
Редактировать: публикация кода GUI, в котором я ловлю исключение:
using (var svc = new DBServiceHost.DBServiceClient())
{
svc.ClientCredentials.UserName.UserName = view.userName;
svc.ClientCredentials.UserName.Password = view.userPass;
int asd = svc.GetCompanies().First().CompanyID;
}
Это присвоение int просто для получения этого исключения в этом месте.