Дуплексный канал WCF от DMZ до Интранета - PullRequest
0 голосов
/ 04 октября 2011

Мы работаем с двухканальной службой внутри домена.У нас есть привязка 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 Ответ

0 голосов
/ 04 октября 2011

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

...