Назад | Перейти на главную страницу

Сбой шлюза MSTSC + при автоматическом переподключении

У нас есть приложение, которое используется как RemoteApp. Пользователи получают доступ к RemoteApp через шлюз.

У нас возникают сбои у пользователей, использующих MSTSC v.6.3 на Win64 (протестировано с Windows 7 и Windows 8), каждый раз, когда происходит ненормальное отключение (сбой подключения).

Типичный сбой - это нарушение прав доступа внутри MSTSC с сообщением об ошибке «Подключение к удаленному рабочему столу перестало работать». но иногда MSTSC просто зависают. Средство просмотра событий показывает «Ошибка приложения», идентификатор события 1000, код исключения 0xC0000005 (== нарушение прав доступа).

MSTSC v.6.2 или более ранняя версия в Win64 или MSTSC (любая версия) в Win32 работает нормально.

Не будет сбоев, если мы разрешим пользователям напрямую обращаться к серверам TS, минуя сервер шлюза. В этом случае после сбоя подключения автоматическое переподключение MSTSC будет успешным.

Кто-нибудь знает способ решения этой проблемы? Любая помощь приветствуется.


Дополнительная информация из средства просмотра событий:

Faulting application name: mstsc.exe, version: 6.3.9600.16415, timestamp: 0x524b5b3d
Faulting module name: mstscax.dll, version: 6.3.9600.16503, timestamp: 0x52c5f878
Exception code: 0xc0000005
Fault offset: 0x0000000000439b7a
Faulting process id: 0x1658
Faulting application start time: 0x01cf84a3cfff7048
Faulting application path: C:\Windows\system32\mstsc.exe
Faulting module path: C:\Windows\system32\mstscax.dll

Трассировка стека от отладчика Visual Studio Express 2012:

mstscax.dll!CClientProxyTransport::SetErrorStatus(long)
mstscax.dll!CClientProxyTransport::GetErrorStatus(long,class CClientProxyTransport *)
mstscax.dll!CProxyClientSendPacket::OnComplete(long,unsigned long)
mstscax.dll!CAAAsyncSend::OnComplete(long)
mstscax.dll!CAARpcClientChannel::Shutdown(unsigned long,class IAAAsyncOperation *)
mstscax.dll!CAAAsyncDisconnectChannel::Invoke(unsigned long,class CAAChannel *,class IAATransportChannel *)
mstscax.dll!CAAChannel::DisconnectInternal(int,long)
mstscax.dll!CAARpcClientChannel::HandleReceiveComplete(struct _RPC_ASYNC_STATE *)
mstscax.dll!CAARpcClientChannel::HandleIOCompletion(struct _OVERLAPPED *,unsigned long)
mstscax.dll!CAagIO::AAGIoThreadFunc(void *)
kernel32.dll!BaseThreadInitThunk()
ntdll.dll!RtlUserThreadStart()

Мы обнаружили, что это связано с сообщением о входе на шлюз. Если вы отключите сообщение для входа на шлюз, он работает!

Я не понимаю, почему это происходит. Но это быстрое решение. И мы надеемся, что Microsoft исправит эту ошибку.