У меня есть служба 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. Я пытался запустить его под той же учетной записью, что и консольное приложение, но не повезло. У кого-нибудь есть идеи?