powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / WCF, Web Services, Remoting [игнор отключен] [закрыт для гостей] / Существует ли ограничение на кол-во DataSet в Remoting?
16 сообщений из 16, страница 1 из 1
Существует ли ограничение на кол-во DataSet в Remoting?
    #35002243
Remoting-клиент (серверная сборка крутится под IIS (http-канал), клиент (пока) на этом же компе) при попытке сделать запрос (результат приходит в виде DataSet) в какой-то момент валится.
Точнее, необходимо получить несколько датасетов, три получаю без проблем, на 4-ом программа зависает. Иногда без проблем могу получить все (пробовал на 10 датасетах). Но тут 50 на 50 - или пройдет или нет.
Вопрос - есть ли какое ограничение на кол-во датасетов в программе? (кстати, вместо DataSet пробовал возвращать и DataTable - программа так же зависала). Может нужны какие-то очистки памяти? Или наоборот проверять возможность ее резервирования?

PS: в датасет попадает выборка из базы данных. Точно знаю (проверял), что на момент возвращения из функции сборки на сервере этот датасет успешно инициализировался.

В сборке реализован интерфейс:
Код: plaintext
1.
2.
3.
public interface IService
{
    DataSet GetDataSet();
}
Далее так:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
[Serializable]
public class RemoteClass : MarshalByRefObject, IService
{
    public DataSet GetDataSet()
    {
        DataSet MyDataSet = new DataSet();
        ...
        return MyDataSet;
    }
}
Клиент:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
remservice = (RemoteClass)Activator.GetObject(typeof(RemoteClass), "http://www.myurl.ru/Sborka.rem");
for (int i = 1; i < 10; i++)
    {
        DataSet myDS = remservice.GetDataSet();

        MessageBox.Show(i.ToString());
    }
...
Рейтинг: 0 / 0
Существует ли ограничение на кол-во DataSet в Remoting?
    #35002860
ВМоисеев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>Владимир Б.
> ... Точнее, необходимо получить несколько датасетов, ...
Попробуй в качестве эксперимента передавать byte[]. Т.е. сериализуй DataSet явно в binary, руками.

С уважением, Владимир.
...
Рейтинг: 0 / 0
Существует ли ограничение на кол-во DataSet в Remoting?
    #35003153
А можно пример? - как это будет выглядеть в GetDataSet() в сборке и в самом клиенте.
Заранее спасибо.
...
Рейтинг: 0 / 0
Существует ли ограничение на кол-во DataSet в Remoting?
    #35003164
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MarshalByRefObject сознательно сделан?
...
Рейтинг: 0 / 0
Существует ли ограничение на кол-во DataSet в Remoting?
    #35003210
Если я правильно понимаю суть MarshalByRefObject - у клиента только интерфейс с описанием вызываемых методов и клиент не сможет достать внутренний код сборки, находящейся на серваке, в котором в том числе указаны параметры для доступа к SQL Server и т.п. То бишь MarshalByRefObject (в совокупности с интерфесом) дает мне некую гарантию, что сервак не взломают.
...
Рейтинг: 0 / 0
Существует ли ограничение на кол-во DataSet в Remoting?
    #35003560
maybeleo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А проблема состоит именно в зависании, т.е. никаких исключений не сыпется? Время жизни у экземпляра RemoteClass как-то контролируете?
...
Рейтинг: 0 / 0
Существует ли ограничение на кол-во DataSet в Remoting?
    #35003615
Фотография pation
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Владимир Б.Если я правильно понимаю суть MarshalByRefObject - у клиента только интерфейс с описанием вызываемых методов и клиент не сможет достать внутренний код сборки, находящейся на серваке, в котором в том числе указаны параметры для доступа к SQL Server и т.п. То бишь MarshalByRefObject (в совокупности с интерфесом) дает мне некую гарантию, что сервак не взломают.

Такую гарантию тебе даже дядюшка Били даст =))
а MarshalByRefObject позваляет осуществлять взаимодействие между доменами приложений
...
Рейтинг: 0 / 0
Существует ли ограничение на кол-во DataSet в Remoting?
    #35003766
ВМоисеев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>Владимир Б.
>А можно пример?

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
 MemoryStream xms;
 //-- Бинарная сериализация объекта в начало xms
 //-- xms <-- байтовое представление объекта
 //=========================================================
 public static bool binSerObject(object obj) {
  try {
   xms=new MemoryStream();
   BinaryFormatter binForm=new BinaryFormatter();
   binForm.Serialize(xms,obj,null);
   xms.Position=0;
   return true;
  }
  catch{return false;}
 }
 //-- Бинарная сериализация объекта во фрагмент xms
 //-- xms <-- байтовое представление объекта
 public static bool ObjectToXms(object obj) {
   try {
     BinaryFormatter binForm = new BinaryFormatter();
     binForm.Serialize(xms, obj, null);
     return true;
   }
   catch { return false; }
 }
 //=========================================================
 //-- Бинарная десериализация объекта из MemoryStream
 //-- xms <-- байтовое представление объекта
 //=========================================================
 public static object binDeSerObject()	{
  try {
    BinaryFormatter binForm=new BinaryFormatter();
    return binForm.Deserialize(xms,null);
  }
  catch	{return null;}

 //========================
 public interface IService   {
     byte[] GetDataSet();
  }

 public DataSet GetDataSet()  {
   DataSet MyDataSet = new DataSet();
    ...
    return binDeSerObject(MyDataSet).ToArray();
 }

 }

С уважением, Владимир.
...
Рейтинг: 0 / 0
Существует ли ограничение на кол-во DataSet в Remoting?
    #35004076
ВМоисеев
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
 MemoryStream xms;
 //-- Бинарная сериализация объекта в начало xms
 public static bool binSerObject(object obj) {
  try {
   ...
   binForm.Serialize(xms,obj,null);
   ...
  }
  catch{return false;}
 }
 //-- Бинарная сериализация объекта во фрагмент xms
 public static bool ObjectToXms(object obj) {
   try {
     ...
     binForm.Serialize(xms, obj, null);
     ...
   }
   catch { return false; }
 }
 //-- Бинарная десериализация объекта из MemoryStream
 public static object binDeSerObject()	{
  try {
    ...
    return binForm.Deserialize(xms,null);
  }
  catch	{return null;}

 //========================
 public interface IService   {
     byte[] GetDataSet();
  }

 public DataSet GetDataSet()  {
   DataSet MyDataSet = new DataSet();
    ...
    return binDeSerObject(MyDataSet).ToArray();
 }

 }

Владимир, у меня к Вам вопросы:
1. Вышеприведенный код относится к сборке? или что-то к клиенту?
2. Если посмотрим в код GetDataSet(), то в нем есть только binDeSerObject(). Ниоткуда (ни в GetDataSet, ни в binDeSerObject) нет запуска binSerObject() и ObjectToXms() - они для примера чего приведены?
3. В binDeSerObject() используется ДЕсериализация - это правильно? Мы же еще ничего не сериализовали. Повторяю - познаний в этих областях у меня мало, может я чего упустил?
maybeleoА проблема состоит именно в зависании, т.е. никаких исключений не сыпется? Время жизни у экземпляра RemoteClass как-то контролируете?
Да, никаких исключений (к сожалению :) - были бы они, можно было бы на что-то опираться). Время жизни - пожизненное (надеюсь), определяю его так (в сборке):
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
[Serializable]
public class RemoteClass : MarshalByRefObject, IService
{
    public override object InitializeLifetimeService()
    {
        return null;
    }
    public DataSet GetDataSet()
    {
        DataSet MyDataSet = new DataSet();
        ...
        return MyDataSet;
    }
} 
правда не знаю, нужно ли его (InitializeLifetimeService) где-то инициализировать и как?
...
Рейтинг: 0 / 0
Существует ли ограничение на кол-во DataSet в Remoting?
    #35004179
Уточню еще (может подробность какая подскажет ответ?):
У меня VS2005, FrameWork 2.0.
На форме использую TabControl (2 вкладки - 1. Обычный режим, 2. Remoting. На вкладке "Remoting" тоже есть TabControl, 5 вкладок, на каждой по одной DataGridView). Переключившись в "Remoting" из сборки вытягиваю один DataSet, в который я положил 5 таблиц (через селекты из SQL Server). После этого инициализирую на каждой вкладке DataGridView соотв. таблицей. После этого я хожу по вкладкам и смотрю данные в таблицах.
Проблема в том, что переходя с вкладки на вкладку (очередность не играет роли, сбой происходит в любой момент - и на 2-ой вкладке и/или на 5-ой) у меня зависает прога, появляются часики.
Повторюсь, что в момент переключения вкладок для просмотра данных? из remoting-соединения я уже вытянул DataSet и распихал DataTable по DataGridView.
...
Рейтинг: 0 / 0
Существует ли ограничение на кол-во DataSet в Remoting?
    #35004792
Прочитал, что зависание в WinForms могут вызвать два одновременно идущих потока. Специально в коде я их не создаю. Но может в этом направлении копать?
PS: Уже точно выяснил, что зависание именно в программе клиента.
...
Рейтинг: 0 / 0
Существует ли ограничение на кол-во DataSet в Remoting?
    #35011017
ВМоисеев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>Владимир Б.
>В binDeSerObject() используется ДЕсериализация - это правильно?

Извините, вкралась ошибка.
Должно быть так: return binSerObject(MyDataSet).ToArray();

С уважением, Владимир.
...
Рейтинг: 0 / 0
Существует ли ограничение на кол-во DataSet в Remoting?
    #35011085
ВМоисеев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>Владимир Б.
>Уточню еще ...
.Net Remoting здесь не причём. Похоже ошибка где-то в программе.
Создайте один! static class (global) и разместите здесь запрашиваемый DataSet. А лучше, заполняйте таблицы глобального DataSet, предварительно очистив их (Clear) записями из полученного DataSet. А все гриды статично настройте на таблицы глобального DataSet.

С уважением, Владимир.
...
Рейтинг: 0 / 0
Существует ли ограничение на кол-во DataSet в Remoting?
    #35011156
vagner забывший пароль
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мимоходом.
По поводу DataTable.Clear. Как-то на миллионе записей заметил, что метод сей выполняется очень долго, с тех пор, минуя Clear вызываю сразу Dispose.
...
Рейтинг: 0 / 0
Существует ли ограничение на кол-во DataSet в Remoting?
    #35011229
ВМоисеев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>vagner забывший пароль
> ... Как-то на миллионе записей заметил ...
Миллион записей в локальной таблице клиентского приложения это круто. Только не говорите, что у Вас медленно работает DataGridView.
Потом, у меня есть предположение, что программа Владимир Б., обрашается к компонентам DataSet уже уничтоженным, но еще не построенным. Поэтому и предлагаю оставить структуру DataSet const, а менять только содержимое.

С уважением, Владимир.
...
Рейтинг: 0 / 0
Существует ли ограничение на кол-во DataSet в Remoting?
    #35011313
vagner забывший пароль
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну, допустим, миллион записей там оказались принудительно, тестировался механизм кастомной сериализации. На реальных объемах мы как раз и не замечали длительность этой операции (Clear), думаю, что и большинство остальных участников форума этого не замечали, поэтому и (заметьте, мимоходом) сделал это замечание.
...
Рейтинг: 0 / 0
16 сообщений из 16, страница 1 из 1
Форумы / WCF, Web Services, Remoting [игнор отключен] [закрыт для гостей] / Существует ли ограничение на кол-во DataSet в Remoting?
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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