Гость
Форумы / WCF, Web Services, Remoting [игнор отключен] [закрыт для гостей] / WCF + подписки / 5 сообщений из 5, страница 1 из 1
05.11.2012, 14:36
    #38025643
noob123
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
WCF + подписки
Есть некий источник событий, в пике в секунду создается 4-6 новых событий которые нужно рассылать подписчикам. (примерно 500).
реализован сервис
InstanceContextMode = InstanceContextMode.Single, ConcurrencyMode = ConcurrencyMode.Multiple
события рассылаются следующим образом. просто проходим циклом по всем подписчикам и вызываем callback.
все работает отлично пока какой-нибудь клиент не отваливается. соответственно все ждут пока истечет таймаут.

есть идея реализовать это так:
заводим пул потоков для рассылки событий, и для каждого подписчика выбираем свободный поток и ставим задачу по отправке.
но опять же это частное решение.
так как например если из 500 клиентов отпадет половина то можно весь пул забить задачами которые будут висеть по таймауту. (или в ситуации когда в пуле нет свободных потоков, расширять пул?)

решается ли как то эта проблема штатными средствами wcf?
...
Рейтинг: 0 / 0
06.11.2012, 21:26
    #38027543
a_titeev
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
WCF + подписки
noob123,

Тоже было бы интересно решение... начал городить что-то подобное, но какое-скверное чувство что вс должно быть не так совсем - как то сама модель подписки ломается...
...
Рейтинг: 0 / 0
07.11.2012, 13:03
    #38028431
pation
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
WCF + подписки
noob123так как например если из 500 клиентов отпадет половина то можно весь пул забить задачами которые будут висеть по таймауту. (или в ситуации когда в пуле нет свободных потоков, расширять пул?)

решается ли как то эта проблема штатными средствами wcf?

решается, только к wcf это отношения не имеет,
можете вообще каждый callback отправлять в новом потоке
...
Рейтинг: 0 / 0
13.11.2012, 08:57
    #38035652
noob123
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
WCF + подписки
кстати уточнение, все что выше работает с учетом
<reliableSession enabled="true"/>
тоесть используются надежные сеансы.
если же их отключить. то при отключении клиента, например даже если физически отрубить от сети, вываливается событие
OperationContext.Current.Channel.Faulted += new EventHandler(Channel_Faulted);
причем почти моментально (причем даже если сообщения никакие не рассылать).
правда не очень понимаю как это происходит? тоесть получается какой то механизм типа пинга есть? (и не снизит ли это общую производительность при большом количестве клиентов?)
...
Рейтинг: 0 / 0
14.11.2012, 10:28
    #38037463
__Pavel__
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
WCF + подписки
Странно у меня соединения отваливаются моментально... создай в интерфейсе пустую процедуру
Код: vbnet
1.
2.
3.
4.
5.
6.
Public Interface ICallback

    <OperationContract(IsOneWay:=True)> _
    Sub Ping()

End Interface



И вызывай ее перед тем как отправлять что либо на клиент, если соединения нет, то исключение вылетает моментально... во всяком случае у меня так.

Вот как мой сервер время от времени проверяет отвалившиеся клиенты:

Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
    Private Sub Tim_Tick()
        For i As Integer = S.pub_AdministratorsLogin.Count - 1 To 0 Step -1
            Try
                DirectCast(S.pub_AdministratorsLogin.Keys(i), ICallback).Ping()
            Catch ex As Exception
                S.U_Exit(S.pub_AdministratorsLogin.Values(i).ToString)
            End Try
        Next
        For i As Integer = S.pub_ClientsLogin.Count - 1 To 0 Step -1
            Try
                DirectCast(S.pub_ClientsLogin.Keys(i), ICallback).Ping()
            Catch ex As Exception
                S.U_Exit(S.pub_ClientsLogin.Values(i).ToString)
            End Try
        Next
    End Sub
...
Рейтинг: 0 / 0
Форумы / WCF, Web Services, Remoting [игнор отключен] [закрыт для гостей] / WCF + подписки / 5 сообщений из 5, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]