Ошибка подключения к сервису 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 = в моем случае полный псевдоним домена для сервера

Другие вопросы по тегам