Это может быть глупо / не возможно. Однако я пытаюсь добиться следующего:
- У меня есть виртуальная машина, на которой размещены веб-службы WCF в IIS 7 в Windows Server 2008
- Я использую привязку basichttp
- Клиентский код отлично работает на других машинах
- Эта виртуальная машина сервера также должна выполнять пакетную обработку, поэтому мне нужно использовать клиентский доступ к этим службам WCF на ней
При запуске на реальном боксе, где размещаются службы WCF, я получаю ...
System.ServiceModel.Security.MessageSecurityException: HTTP-запрос не авторизован с помощью схемы аутентификации клиента 'Ntlm'. Заголовок аутентификации, полученный от сервера, был 'Negotiate, NTLM'. ---> System.Net.WebException: удаленный сервер возвратил ошибку: (401) не авторизован.
в System.Net.HttpWebRequest.GetResponse ()
в System.ServiceModel.Channels.HttpChannelFactory.HttpRequestChannel.HttpChannelRequest.WaitForReply (TimeSpan timeout)
--- Конец внутренней трассировки стека исключений ---
Трассировка стека серверов:
в System.ServiceModel.Channels.HttpChannelUtilities.ValidateAuthentication (запрос HttpWebRequest, ответ HttpWebResponse, WebException responseException, фабрика HttpChannelFactory)
в System.ServiceModel.Channels.HttpChannelUtilities.ValidateRequestReplyResponse (запрос HttpWebRequest, ответ HttpWebResponse, фабрика HttpChannelFactory, WebException responseException)
в System.ServiceModel.Channels.HttpChannelFactory.HttpRequestChannel.HttpChannelRequest.WaitForReply (TimeSpan timeout)
в System.ServiceModel.Channels.RequestChannel.Request (сообщение-сообщение, время ожидания TimeSpan)
в System.ServiceModel.Dispatcher.RequestChannelBinder.Request (сообщение-сообщение, время ожидания TimeSpan)
в System.ServiceModel.Channels.ServiceChannel.Call (строковое действие, логический односторонний режим, операция ProxyOperationRuntime, Object [] ins, Object [] outs, TimeSpan timeout)
в System.ServiceModel.Channels.ServiceChannelProxy.InvokeService (метод IMethodCallMessageCall, операция ProxyOperationRuntime)
в System.ServiceModel.Channels.ServiceChannelProxy.Invoke (сообщение IMessage)
Исключение переброшено в [0]:
в System.Runtime.Remoting.Proxies.RealProxy.HandleReturnMessage (IMessage reqMsg, IMessage retMsg)
в System.Runtime.Remoting.Proxies.RealProxy.PrivateInvoke (MessageData & msgData, тип Int32)
Что меня интересует, так это то, возможно ли то, что я пытаюсь сделать, - я не вижу причин, по которым я не могу подключиться к услуге с хост-машины, но конкретная ситуация может помешать мне - и если это так, то что Для этого нужно внести изменения в мои настройки?
Соответствующая DLL устанавливает привязку следующим образом ...
BasicHttpBinding binding = new BasicHttpBinding();
binding.Security.Mode = BasicHttpSecurityMode.TransportCredentialOnly;
binding.Security.Transport.ClientCredentialType = HttpClientCredentialType.Ntlm;
binding.TransferMode = TransferMode.Buffered;
binding.MaxBufferPoolSize = int.MaxValue;
binding.MaxReceivedMessageSize = int.MaxValue;
binding.ReaderQuotas.MaxArrayLength = int.MaxValue;
binding.ReaderQuotas.MaxStringContentLength = int.MaxValue;
binding.OpenTimeout = openTimeout;
binding.SendTimeout = sendTimeout;
binding.ReceiveTimeout = receiveTimeout;
binding.CloseTimeout = closeTimeout;
return binding;
Вывод аутентификации cscript: ...
NTAuthenticationProviders : (STRING) "Negotiate,NTLM"
Служба настроена на требование членства в сетевой группе, членом которой является подключаемый пользователь (PrincipalPermission).
Как указано в комментариях ниже, я просмотрел журнал событий безопасности и обнаружил, что, когда пользователь (сетевая учетная запись) подключается в качестве клиента к службе WCF на хост-компьютере, появляется запись, в которой говорится, что учетной записи не удалось войти в систему. - передан нулевой SID.
An account failed to log on.
Subject:
Security ID: NULL SID
Account Name: -
Account Domain: -
Logon ID: 0x0
Logon Type: 3
Account For Which Logon Failed:
Security ID: NULL SID
Account Name: *<network account>*
Account Domain: *<account domain>*
Failure Information:
Failure Reason: An Error occured during Logon.
Status: 0xc000006d
Sub Status: 0x0
Вопрос в том, почему это происходит?