Как правило, я видел эту ошибку, когда противоположная сторона не закрыла соединение.Если на стороне клиента у вас есть класс, унаследованный от ClientBase<T>
, тогда вы должны вызвать Close
, когда закончите работу со службой (фактически ClientBase<T>
реализует IDisposable
, чтобы вы могли использовать оператор using
).
Если вы используете ChannelFactory<T>
для создания соединения со службой, результатом будет прокси, который реализует контракт, но также реализует ICommunicationObject
;Вы должны вызвать Close
, когда закончите.
На стороне службы все не так, сеанс (и, следовательно, базовый сокет) управляется клиентом.Если служба отбрасывает сокет, скорее всего, это является результатом ошибки, и в этом случае предложение Music Magi является хорошим.Microsoft говорит о том, как это сделать здесь .
Обратите внимание, что для получения четкого представления о том, что происходит, вам может потребоваться настроить трассировку как для клиента, так и для службы.Для просмотра следов вы должны использовать SvcTraceViewer
, который должен находиться в папке Program Files\Microsoft SDKs\Windows\v6.0A\bin
или Program Files\Microsoft SDKs\Windows\v7.0A\bin
.Если вам нужно отследить как клиента, так и службу, вы можете открыть оба файла вместе в SvcTraceViewer
с помощью меню File / Add
.