Дуплексный канал WCF от DMZ до Интранета

У нас работает двухканальная служба внутри домена. У нас есть привязка TCP к порту 20120 и привязка HTTP к порту 20121.

В DMZ (веб) мы хотим получить доступ к этой службе WCF. Брандмауэр, кажется, открыт из Интернета для службы. Используя telnet, я могу получить доступ к обоим портам, а также просматривать WSDL из веб-браузера. Теперь, когда я пытаюсь установить соединение с сервисом из веб-приложения (оно использует TcpBinding, и я не могу легко изменить его на HttpBinding без повторного развертывания новых двоичных файлов, что является болезненным процессом), я получаю исключение.

System.ServiceModel.CommunicationException, System.ServiceModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089

The socket connection was aborted. This could be caused by an error processing your message or a receive timeout being exceeded by the remote host, or an underlying network resource issue. Local socket timeout was '00:00:59.9680000'.

System.ServiceModel.Channels.StreamConnection.Read(Byte[] buffer, Int32 offset, Int32 size, TimeSpan timeout)
System.ServiceModel.Channels.ClientFramingDuplexSessionChannel.SendPreamble(IConnection connection, ArraySegment`1 preamble, TimeoutHelper& timeoutHelper)
System.ServiceModel.Channels.ClientFramingDuplexSessionChannel.DuplexConnectionPoolHelper.AcceptPooledConnection(IConnection connection, TimeoutHelper& timeoutHelper)
System.ServiceModel.Channels.ConnectionPoolHelper.EstablishConnection(TimeSpan timeout)
System.ServiceModel.Channels.ClientFramingDuplexSessionChannel.OnOpen(TimeSpan timeout)
System.ServiceModel.Channels.CommunicationObject.Open(TimeSpan timeout)
System.ServiceModel.Channels.ServiceChannel.OnOpen(TimeSpan timeout)
System.ServiceModel.Channels.CommunicationObject.Open(TimeSpan timeout)
System.RuntimeMethodHandle._InvokeMethodFast(IRuntimeMethodInfo method, Object target, Object[] arguments, SignatureStruct& sig, MethodAttributes methodAttributes, RuntimeType typeOwner)
System.Reflection.RuntimeMethodInfo.Invoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture, Boolean skipVisibilityChecks)
System.Reflection.RuntimeMethodInfo.Invoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture)
System.ServiceModel.Channels.ServiceChannelProxy.ExecuteMessage(Object target, IMethodCallMessage methodCall)
System.ServiceModel.Channels.ServiceChannelProxy.InvokeChannel(IMethodCallMessage methodCall)
System.ServiceModel.Channels.ServiceChannelProxy.Invoke(IMessage message)
System.Runtime.Remoting.Proxies.RealProxy.PrivateInvoke(MessageData& msgData, Int32 type)
System.ServiceModel.ICommunicationObject.Open(TimeSpan timeout)
System.ServiceModel.ClientBase`1.System.ServiceModel.ICommunicationObject.Open(TimeSpan timeout) ...

Нашей тестовой средой была вся интранет, поэтому нет DMZ. там все отлично работает.

Сам сервис работает как пользователь домена, а поведение клиентского сервиса настроено по принципу userPrincipal (например, username@domain.ext). для этого нужен доступ к контроллеру домена domain.exe?

Я также включил ведение журнала WCF на стороне службы, но там ничего не происходит. все вполне, как будто ничего не случилось там. Есть ли другое место, которое я пропустил, чтобы проверить, почему соединение обрывается.

EDIT1: я написал небольшую тестовую программу, которая устанавливает соединение wcf и вызывает 2 метода. Это прекрасно работает на той же машине, что и служба, а также на веб-сайте dmz. Настройки привязки одинаковы. (подтвердил это). Я запускаю тест как локальный пользователь с обычной консоли на веб-машине dmz. какие-нибудь намеки?

1 ответ

Решение

Ну, мы изменили режим безопасности на нет <security mode="None"/> и теперь у сети есть доступ. Я думаю, что проблема заключалась в том, что, хотя я использовал локального пользователя при запуске моей тестовой программы, сеанс vpn/rdp, который я использовал для доступа из домена, чтобы dmz вырубил дыру в безопасности, и я смог подключиться к службе wcf., у веба не было этой дыры, поэтому она провалилась.

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