Это может быть глупо/невозможно. Тем не менее, то, что я пытаюсь достичь следующим образом:Ошибка подключения к службе WCF со своего сервера-хостинга
- У меня есть виртуальная машина хостинг веб-службы WCF в IIS 7 на Windows Server 2008
- Я использую basichttp связывания
- клиентский код работает отлично на других машинах
- Этот сервер VM также должен выполнять пакетную обработку, поэтому мне нужно использовать клиентский доступ к этим 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 тайм-аута) --- Конец внутренней трассировки стека исключений ---
сервера : на 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.HttpChannelR equest.WaitForReply (TimeSpan таймаут) в System.ServiceModel.Channels.RequestChannel.Request (сообщение Message, TimeSpan таймаут) на System.ServiceModel.Dispatcher.RequestChannelBinder.Request (сообщение Message, TimeSpan таймаут) в System.ServiceModel.Channels .ServiceChannel.Call (действие String, Boolean односторонняя, операция ProxyOperationRuntime, Object [] модули, Object [] выходы, TimeSpan тайм-аут) на System.ServiceModel.Channels.ServiceChannelProxy.InvokeService (IMethodCallMessage methodCall, операция ProxyOperationRuntime) на System.ServiceModel .Channels.ServiceChannelProxy.Invoke (Шеззаде сообщение)
Исключение при вызваны повторно [0]: в System.Runtime.Remoting.Proxies.RealProxy.HandleReturnMessag е (Шеззаде reqMsg, Шеззаде 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 на главной машине, есть запись, в которой жалуется, что учетная запись не удалась logon - передается NULD 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
Вопрос в том, почему это происходит?
Проверьте конфигурацию клиента HTTP: // StackOverflow .com/questions/1134119/how-to-force-a-net-wcf-client-to-use-ntlm-in-an-basichttpbinding –
У клиента нет конфигурации - это DLL, поэтому настройка выполняется программно. Строка binding.Security.Transport.ClientCredentialType выполняет настройку в NTLM. Я считаю, что проблема связана с тем, что я запускаю клиентский код на сервере, на котором размещается служба, поскольку это работает в другом месте. Я просто не знаю, что изменить. – anonymouse
Я также пытался сменить клиента на использование Windows, а не NTLM. Получите аналогичный откат, но с Ntlm обменялся с Negotiate в сообщении об ошибке. Я уверен, что это проблема «только на сервере», возможно, WCF, возможно, конфигурация IIS и т. Д. – anonymouse