Безопасность WCF в службе Windows - PullRequest
5 голосов
/ 13 октября 2009

У меня есть служба WCF, которая может работать как консольное приложение и служба Windows. Я недавно скопировал консольное приложение на сервер W2K3 со следующими настройками безопасности:

<wsHttpBinding>
 <binding name="ServiceBinding_Security" transactionFlow="true" >
  <security mode="TransportWithMessageCredential" >
    <message clientCredentialType="UserName" />
  </security>           
 </binding>             
</wsHttpBinding> 

<serviceCredentials>
 <userNameAuthentication  userNamePasswordValidationMode="Custom" 
  customUserNamePasswordValidatorType="Common.CustomUserNameValidator, Common" />
</serviceCredentials>

Безопасность работает без проблем. У меня точно такой же код, но он работает в службе Windows, и я получаю следующую ошибку при попытке вызвать любой из методов из клиента:

System.ServiceModel.Security.MessageSecurityException was unhandled
Message="An unsecured or incorrectly secured fault was received from 
         the other party. See the inner FaultException for the fault code and detail."
  Source="mscorlib"
  StackTrace:
    Server stack trace: 
       at System.ServiceModel.Channels.SecurityChannelFactory`1.SecurityRequestChannel.ProcessReply(Message reply, SecurityProtocolCorrelationState correlationState, TimeSpan timeout)
       ......   
    (lots of stacktrace info - not very useful)

  InnerException: System.ServiceModel.FaultException
       Message="An error occurred when verifying security for the message."

Исключение мне ничего не говорит. Я предполагаю, что это как-то связано с доступом к системным ресурсам из службы Windows. Я пытался запустить его под той же учетной записью, что и консольное приложение, но не повезло. У кого-нибудь есть идеи?

Ответы [ 4 ]

1 голос
/ 15 октября 2009

Обновление - я изменил customUserNamePasswordValidatorType с Custom на Windows. Это прекрасно работало как в консоли, так и в службе Windows. Я могу только предположить, что что-то в Custom Validator вызывало проблему.

Пользовательский валидатор использовал пользовательский раздел конфигурации в App.config для проверки идентификатора пользователя и пароля. Я бы подумал, что это сработало бы из службы Windows, хотя.

Спасибо всем, кто оставил ответ.

1 голос
/ 13 октября 2009

Это ошибка, которая иногда не имеет ничего общего с безопасностью.

Я бы порекомендовал вам сначала попытаться заставить его работать без защиты, затем просто с защитой сообщений, затем с транспортом и, наконец, с TransportWithMessageCredential.

Также, если вы запускаете приложение консоли и приложение службы Windows на одном компьютере, обязательно остановите приложение консоли перед запуском службы Windows, чтобы избежать конфликта портов

1 голос
/ 13 октября 2009

Включить диагностику на сервисе. Это должно дать вам довольно хорошее представление о том, получает ли служба даже сообщение и где служба выдает исключение.

0 голосов
/ 13 октября 2009

Вы используете пользовательский валидатор пользователя / имени - имеет ли служба Windows доступ к этим файлам?

Под какой учетной записью вы запускаете службу NT?

Работает ли все функции безопасности отключены ?? (просто чтобы увидеть)

Марк

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