2013-01-14 2 views
1

У меня есть служба wcf на сервере, который отлично работает на этом сервере. Я пытаюсь добавить ссылку на службу той службы, которая также успешно добавлена ​​в другом сервере, а затем попытаться аутентифицировать эти услуги как нижеКак проверить подлинность хостинга службы wcf с именем пользователя и паролем?

var engServiceClient = new EngServiceClient(); 
engServiceClient.ClientCredentials.Windows.AllowedImpersonationLevel = TokenImpersonationLevel.Anonymous; 
engServiceClient.ClientCredentials.Windows.ClientCredential.Domain = @"test"; 
engServiceClient.ClientCredentials.Windows.ClientCredential.UserName = @"hello"; 
engServiceClient.ClientCredentials.Windows.ClientCredential.Password = @"123wcf"; 
var getData = engServiceClient.GetActiveEngagements(); 

, но я получил за исключением ошибки (Запрос был прерван: запрос был отменен .) при передаче данных по HTTP-каналу.

Файл конфигурации генерируется после добавления ссылки на службу

<configuration> 
    <system.serviceModel> 
     <bindings> 
      <basicHttpBinding> 
       <binding name="EngService" closeTimeout="00:01:00" openTimeout="00:01:00" 
        receiveTimeout="00:10:00" sendTimeout="00:01:00" allowCookies="false" 
        bypassProxyOnLocal="false" hostNameComparisonMode="StrongWildcard" 
        maxBufferSize="65536" maxBufferPoolSize="524288" maxReceivedMessageSize="65536" 
        messageEncoding="Text" textEncoding="utf-8" transferMode="Buffered" 
        useDefaultWebProxy="true"> 
        <readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384" 
         maxBytesPerRead="4096" maxNameTableCharCount="16384" /> 
        <security mode="Transport"> 
         <transport clientCredentialType="Windows" proxyCredentialType="None" 
          realm="" /> 
         <message clientCredentialType="UserName" algorithmSuite="Default" /> 
        </security> 
       </binding> 
      </basicHttpBinding> 
     </bindings> 
     <client> 
      <endpoint address="https://testwebdemo-t.orioninc.com:8443/Services/2012v2/EngService.svc" 
       binding="basicHttpBinding" bindingConfiguration="EngService" 
       contract="ServiceReference1.IEngService" name="EngService" /> 
     </client> 
    </system.serviceModel> 
</configuration> 

Как я могу аутентифицировать эту услугу, используя свой логин и пароль?

ответ

3

Прежде всего, при настройке служб/клиентов WCF очень полезно настроить трассировку WCF, чтобы получить более подробные и удобные сообщения об ошибках. Для получения дополнительной информации о трассировке WCF см. WCF Tracing

Какую авторизацию клиента вы пытаетесь реализовать? Я вижу, что вы указали тип Windows для безопасности транспорта и UserName для обеспечения безопасности сообщений, который является избыточным и запутанным.

Предположим, вы просто хотите, чтобы простая авторизация имени пользователя и пароля была не Windows one over https. Тогда ваша секция безопасности должна выглядеть следующим образом:

<security mode="TransportWithMessageCredential"> 
     <transport clientCredentialType="None" /> 
     <message clientCredentialType="UserName" establishSecurityContext="true"/> 
     </security> 

Затем вы можете использовать этот код, чтобы указать учетные данные на стороне клиента.

client.ClientCredentials.UserName.UserName = "username"; 
client.ClientCredentials.UserName.Password = "password"; 

Надеется, что это помогает

Смежные вопросы