Просмотр текущих открытых каналов NetNamedPipe?

Есть ли способ определить, какие каналы netNamedpipe открыты в данный момент? Это поможет мне отладить мой клиент-сервер WCF и убедиться, что я правильно закрываю свои каналы.

Это похоже на инструмент netstat для сетевых подключений, но вместо этого для netNamedPipes.

3 ответа

Решение

Насколько мне известно, для этого нет никакого инструмента.

Вы можете использовать Process Explorer, чтобы найти то, что обрабатывает объекты именованных каналов, которые содержит процесс, но на самом деле это не ответит на ваш вопрос. Чтобы распознать каналы, созданные для каналов WCF NetNamedPipeBinding, вам необходимо знать, что вы ищете. Трубки WCF будут включать GUID в свое имя, примерно так:

\\.\pipe\197ad019-6e5f-48cb-8f88-02ae11dfd8c0

Смотрите здесь для получения дополнительной информации об этом.

Однако тот факт, что дескриптор существует, сам по себе ничего не говорит о состоянии канала. Существует механизм объединения WCF для трубных соединений, поэтому, даже если канал правильно закрыт, это не гарантирует, что само трубное соединение было разорвано и дескриптор освобожден (хотя, если вы увидите процесс, постепенно приобретающий все больше и больше дескрипторов, которые предположил бы, что может быть проблема с очисткой канала).

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

Вы можете использовать Process Explorer, чтобы увидеть, какие каналы открыт у процесса:

http://technet.microsoft.com/en-us/sysinternals/bb896653

SysInternals имеет команду под названием PipeList. Я считаю, что вы можете скачать команду отдельно здесь:

http://technet.microsoft.com/en-us/sysinternals/dd581625

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