У нас есть удаленный одноэлементный объект, размещенный в IIS, который обслуживает несколько клиентов. Во время разработки мы заметили, что если один клиент остановлен в отладчике, все остальные подключенные клиенты перестанут получать сообщения с сервера. Сообщения доставляются через события обратного вызова, сервер будет создавать свои собственные потоки для отправки сообщений. Я могу создать такое же поведение, поместив Sleep в обработчик событий клиента. Трассировка, которую мы имеем на сервере, показывает, что вызовы всех клиентских обработчиков событий блокируются.
Когда один и тот же объект размещается в автономном exe-файле, блокировка не происходит, когда один клиент отлаживается или иным образом приостанавливается.
Мой вопрос: почему мы видим различное поведение между нашим объектом, размещенным под IIS, и отдельным exe-файлом? Есть ли в IIS параметр, который не позволяет одному клиенту блокировать другие клиенты, разговаривающие с синглтоном.
Первоначально проект был проектом 2.0, в настоящее время он строится на основе платформы 3.5, хотя мы не используем ни одну из сред выполнения 3.5.
Remoting для клиента настроены так
<system.runtime.remoting>
<application>
<channels>
<channel ref="http" port="0" clientConnectionLimit="120" useDefaultCredentials="true" timeout="2000">
<clientProviders>
<formatter ref="binary" typeFilterLevel="Full"/>
</clientProviders>
<serverProviders>
<formatter ref="binary" typeFilterLevel="Full"/>
</serverProviders>
</channel>
</channels>
</application>
</system.runtime.remoting>
На IIS сервер настроен так
<configuration>
<system.runtime.remoting>
<application>
<channels>
<channel ref="http">
<clientProviders>
<formatter ref="binary" typeFilterLevel="Full"/>
</clientProviders>
<serverProviders>
<formatter ref="binary" typeFilterLevel="Full"/>
</serverProviders>
</channel>
</channels>
<service>
<wellknown mode="Singleton" displayName="NotificationManager" type="Notification.NotificationManager, Notification" objectUri="NotificationManager.rem"/>
</service>
</application>
</system.runtime.remoting>
</configuration>
Автономный сервер настроен так:
<system.runtime.remoting>
<application>
<channels>
<channel ref="http" port="8080" clientConnectionLimit="120" useDefaultCredentials="true" timeout="20000">
<clientProviders>
<formatter ref="binary" typeFilterLevel="Full"/>
</clientProviders>
<serverProviders>
<formatter ref="binary" typeFilterLevel="Full"/>
</serverProviders>
</channel>
</channels>
<service>
<wellknown mode="Singleton" displayName="NotificationManager" type="Notification.NotificationManager, Notification" objectUri="NotificationManager.rem"/>
</service>
</application>
</system.runtime.remoting>