Проблема аутентификации WCF - PullRequest
2 голосов
/ 10 января 2011

У меня большая проблема с пользовательской аутентификацией имени пользователя в 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 просто для получения этого исключения в этом месте.

1 Ответ

0 голосов
/ 09 марта 2011

Попробуйте запустить приложение Gui, щелкнув правой кнопкой мыши «Запуск от имени администратора».Также убедитесь, что вы обрезаете поля view.userName.Конечный пробел может создать проблему.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...