Remoting, отключение от сервера

Язык Visual Basic на платформе .NET.

Модераторы: Ramzes, Sebas

lord0n
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 845
Зарегистрирован: 30.06.2005 (Чт) 9:55
Откуда: Moskow

Remoting, отключение от сервера

Сообщение lord0n » 14.08.2007 (Вт) 10:12

Коллеги, доброго времени суток.
Возникла проблема при работе с ремоутенгом:
Подключаюсь к серверу:
Код: Выделить всё

         ChannelServices.RegisterChannel(MyChannel, False)
         RemotingConfiguration.RegisterActivatedClientType(GetType(DBClass.DBClass), "tcp://" & MyMachine & ":" & MyPort & "/MBRRAPIServer/")

         MySap = New DBClass.DBClass


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

Добавил освобождение канала:
Код: Выделить всё

         If ChannelServices.RegisteredChannels.Length > 0 Then
            ChannelServices.UnregisterChannel(ChannelServices.RegisteredChannels(0))
         End If


Канал теперь регистрируется, но при попытке активации обьекта DBClass.DBClass падает с ошибкой: "Attempt to redirect activation of type 'DBClass.DBClass, DBClass' which is already redirected."

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

lord0n
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 845
Зарегистрирован: 30.06.2005 (Чт) 9:55
Откуда: Moskow

Сообщение lord0n » 14.08.2007 (Вт) 11:11

Нашел способ:
Код: Выделить всё

         Dim RegType As ActivatedClientTypeEntry() = RemotingConfiguration.GetRegisteredActivatedClientTypes()

         Dim AlreadyReg As Boolean = False

         If RegType.Length > 0 Then
            Dim x As Integer
            For x = 0 To RegType.Length - 1
               If RegType(x).ObjectType.Name = GetType(DBClass.DBClass).Name Then
                  AlreadyReg = True
                  Exit For
               End If
            Next
         End If

         If AlreadyReg = False Then
            If ChannelServices.RegisteredChannels.Length > 0 Then
               ChannelServices.UnregisterChannel(ChannelServices.RegisteredChannels(0))
            End If


            ChannelServices.RegisterChannel(MyChannel, False)
            RemotingConfiguration.RegisterActivatedClientType(GetType(DBClass.DBClass), "tcp://" & MyMachine & ":" & MyPort & "/MBRRAPIServer/")
         End If

         MySap = New DBClass.DBClass


Этот кусок кода проверяет зарегистрирована ли библиотека. Если зарегистрирована, то происходит локальная регистрация (не знаю как правильно назвать, в общем вызывается конструктор MySap = New DBClass.DBClass).
Если библиотека не активирована, то он её активирует.
Теория - это когда что-то не работает и известно почему.
Практика - это когда что-то работает, но неизвестно почему.
Нам удалось совместить теорию с практикой, теперь ничего не работает и неизвестно почему.

Sebas
Неуловимый Джо
Неуловимый Джо
Аватара пользователя
 
Сообщения: 3626
Зарегистрирован: 12.02.2002 (Вт) 17:25
Откуда: столько наглости такие вопросы задавать

Сообщение Sebas » 14.08.2007 (Вт) 11:27

Ужас, а пристарте низя канал зарегить и не парится?
- Я никогда не понимал, почему они приходят ко мне чтобы умирать?

sebas<-@->mail.ru

lord0n
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 845
Зарегистрирован: 30.06.2005 (Чт) 9:55
Откуда: Moskow

Сообщение lord0n » 14.08.2007 (Вт) 14:09

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

Sebas
Неуловимый Джо
Неуловимый Джо
Аватара пользователя
 
Сообщения: 3626
Зарегистрирован: 12.02.2002 (Вт) 17:25
Откуда: столько наглости такие вопросы задавать

Сообщение Sebas » 15.08.2007 (Ср) 8:46

lord0n писал(а):можно, но у меня библиотека которая вызывается из другой программы
после отработки она закрывается, а сервак продолжает держать соединение открытым


Кто закрывается? Непонял.
- Я никогда не понимал, почему они приходят ко мне чтобы умирать?

sebas<-@->mail.ru

lord0n
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 845
Зарегистрирован: 30.06.2005 (Чт) 9:55
Откуда: Moskow

Сообщение lord0n » 15.08.2007 (Ср) 10:20

Sebas писал(а):
lord0n писал(а):можно, но у меня библиотека которая вызывается из другой программы
после отработки она закрывается, а сервак продолжает держать соединение открытым


Кто закрывается? Непонял.


Я написал библиотеку по клиент-серверной технологии.
На сервере у меня находится класс для работы с БД (т.к. не хочется на каждом компьютере где она будет вызываться ставить клиента оракла)
На клиенте находится обработка данных полученных из БД

Другая прога вызывает мою библиотеку (клиентскую часть). Дллка конектится к серверу. Сервер получает данные из БД и возвращает их дллке. Она их обрабатывает, возвращает результат и завершает работу.

Но канал почему то остается открытым (я так понимаю он будет открыт пока не пройдется сборщик мусора)
Теория - это когда что-то не работает и известно почему.
Практика - это когда что-то работает, но неизвестно почему.
Нам удалось совместить теорию с практикой, теперь ничего не работает и неизвестно почему.

Sebas
Неуловимый Джо
Неуловимый Джо
Аватара пользователя
 
Сообщения: 3626
Зарегистрирован: 12.02.2002 (Вт) 17:25
Откуда: столько наглости такие вопросы задавать

Сообщение Sebas » 15.08.2007 (Ср) 11:44

Она ... и завершает работу.


Что подразумевается под этим?
- Я никогда не понимал, почему они приходят ко мне чтобы умирать?

sebas<-@->mail.ru

lord0n
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 845
Зарегистрирован: 30.06.2005 (Чт) 9:55
Откуда: Moskow

Сообщение lord0n » 16.08.2007 (Чт) 8:46

Она - это библиотека
Завершает работу - сбрасывает в нафин все переменные и обьекты
Теоретически должна выгружаться из памяти
Код завершения в программе которая вызывает библиотеку выглядит так:
Код: Выделить всё

   obj.Dispose
   Set obj = Nothing
Теория - это когда что-то не работает и известно почему.
Практика - это когда что-то работает, но неизвестно почему.
Нам удалось совместить теорию с практикой, теперь ничего не работает и неизвестно почему.


Вернуться в Visual Basic .NET

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 97

    TopList