Ошибка подключения к сервису WCF с хост-сервера - PullRequest
1 голос
/ 21 февраля 2012

Это может быть глупо / не возможно. Однако я пытаюсь добиться следующего:

  • У меня есть виртуальная машина, на которой размещены веб-службы 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

Вопрос в том, почему это происходит?

1 Ответ

1 голос
/ 22 февраля 2012

Метод 1 в этом сообщении делает трюк ...

DisableStrictNameChecking = 1 BackConnectionHostNames = в моем случае полное псевдоним полного имени домена для сервера

...