2008-09-05 4 views
1

У нас есть довольно стандартное клиент-серверное приложение, построенное с использованием MS RPC. Оба клиента и сервер реализованы на C++. Клиент устанавливает сеанс на сервер, а затем совершает повторные обращения к нему в течение определенного периода времени до окончательного закрытия сеанса.Значение/причина исключения RPC «Интерфейсы не экспортированы».

Периодически, однако, особенно при тяжелых условиях эксплуатации, мы наблюдаем появление исключения RPC с кодом 1754: RPC_S_NOTHING_TO_EXPORT.

Похоже, что это происходит в середине сеанса. Пользователь вошел в систему некоторое время, делая успешные вызовы, тогда один из вызовов необъяснимо возвращает эту ошибку. Насколько нам известно, сервер не получает никаких указаний на то, что что-то пошло не так - и он определенно не видит вызова, который клиент сделал.

Код ошибки также имеет постоянные последствия. При повторной попытке клиента соединение также не работает. Однако, если пользователь имеет несколько сеансов пользователя, одновременно работающих между одним и тем же клиентом и сервером, другие подключения не затрагиваются.

В сущности, у меня есть два вопроса:

  1. Кто-нибудь знает, что такое RPC_S_NOTHING_TO_EXPORT средства? Документация MSDN просто говорит: "No interfaces have been exported." ... А? Сессия работала нормально для многочисленных случаев того же звонка до этого момента ...

  2. Есть ли у кого-нибудь идеи относительно того, как определить реальную проблему? Примечание: Захват сетевого трафика - это то, что мы предпочли бы избежать, если это возможно, поскольку проблема достаточно спорадическая, и мы, скорее всего, пройдем через несколько гигабайт трафика, прежде чем запускать это событие.

ответ

1

Захват сетевого трафика будет одним из лучших способов решения этой проблемы. Если вы не можете этого сделать, можете ли вы сбросить клиентский процесс и отладить его с помощью WinDBG или Visual Studio? Может быть, сравнить дамп при нормальной работе в зависимости от состояния ошибки?