Ошибка подключения к сервису WCF с хост-сервера
Это может быть глупо / не возможно. Однако я пытаюсь добиться следующего:
- У меня есть виртуальная машина, на которой размещены веб-службы 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) в System.ServiceModel.Channels.RequestChannel.Request(сообщение сообщения, тайм-аут сообщения TimeSpan, ReaderSec Reservice.RequestSecReCerSerlerServerSerlerServerSerlerServerSerlerServer). время ожидания) в System.ServiceModel.Channels.ServiceChannel.Call(действие String, логическое одностороннее действие, операция ProxyOperationRuntime, Object[] ins, выходы Object [], тайм-аут TimeSpan) в System.ServiceModel.Channels.ServiceChannelProxy.InvokeService, метод OxyOdgeDirectorySource (операция IMC) операция) t 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
Вопрос в том, почему это происходит?
1 ответ
Метод 1 в этом посте делает свое дело...
DisableStrictNameChecking = 1 BackConnectionHostNames = в моем случае полный псевдоним домена для сервера