Модераторы: Partizan, gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> ArgumentNullException в CopyToManaged, нулевой параметр "source" 
:(
    Опции темы
opozdaika
Дата 15.5.2009, 18:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 93
Регистрация: 28.4.2008

Репутация: нет
Всего: нет



В многопоночном приложении с использованием технологи Remoting по TCP каналу возникает исключение, которое невозможно отладить. Просто возникает окно и ничего с ним сделать нельзя, в каком месте кода - не показывает.

А имено: ArgumentNullException в системной функции CopyToManaged. Ей передается нулевой параметр "source".

Ниже детали исключения:
------------------------------------------------
System.ArgumentNullException was unhandled
  Message="Значение не может быть неопределенным.\r\nИмя параметра: source"
  Source="mscorlib"
  ParamName="source"
  StackTrace:
       в System.Runtime.InteropServices.Marshal.CopyToManaged(IntPtr source, Object destination, Int32 startIndex, Int32 length)
       в System.Net.Sockets.AcceptOverlappedAsyncResult.PostCompletion(Int32 numBytes)
       в System.Net.Sockets.BaseOverlappedAsyncResult.CompletionPortCallback(UInt32 errorCode, UInt32 numBytes, NativeOverlapped* nativeOverlapped)
       в System.Threading._IOCompletionCallback.PerformIOCompletionCallback(UInt32 errorCode, UInt32 numBytes, NativeOverlapped* pOVERLAP)
------------------------------------------------

Буду благодарен за любую информацию как найти ошибку. Скорее всего где-то у меня потоки криво написаны. 
Спасибо.
PM MAIL   Вверх
opozdaika
Дата 20.5.2009, 13:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 93
Регистрация: 28.4.2008

Репутация: нет
Всего: нет



Вот глядите, убрал все что можно. Оставил только примитивный ремоутинг по TCP. 
Есть три сборки: Сервер, Клиент и Объект связи. Этот объект я делал сначала в 
одной сборке с сервером, потом вылелил в одтельную сборку - ни на что это не 
влияет. 
Работает так. Запускаю MyServer.exe, затем запускаю MyClient.exe Пока нормально. 
Затем я закрываю MyClient.exe и запускаю его еще раз. И тут приходит 
ArgumentNullException.
Код

//-------------------------------------------------------------
//СЕРВЕР
//-------------------------------------------------------------
using System;
using System.Windows.Forms;
using System.Runtime.Remoting;
using System.Runtime.Remoting.Channels;
using System.Runtime.Remoting.Channels.Tcp;
using MyCommunication;

namespace MyServer
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
        
        private void Form1_Load(object sender, EventArgs e)
        {

            //RemotingConfiguration.CustomErrorsMode = CustomErrorsModes.Off; // All callers receive complete exception information.
            BinaryServerFormatterSinkProvider provider = new BinaryServerFormatterSinkProvider();
            provider.TypeFilterLevel = System.Runtime.Serialization.Formatters.TypeFilterLevel.Full;

            System.Collections.IDictionary props = new System.Collections.Hashtable();
            props["port"] = 1206;

            TcpChannel RemotingChannel = new TcpChannel(props, null, provider);
            ChannelServices.RegisterChannel(RemotingChannel, false);

            // Expose an object for remote calls.
            RemotingConfiguration.RegisterWellKnownServiceType(typeof(Communication), "BlaBlaBla", WellKnownObjectMode.Singleton);
        }
    }
}


//------------------------------------------------------------
//КОМУНИКАЦИОННЫЙ Объект (даже сделал в отдельной сборек)
//------------------------------------------------------------
using System;

namespace MyCommunication
{
    public interface ICommunication
    {
        int Version { get; } // Номер версии реализации 
    }

    //Объект для ремоутинга 
    public class Communication : MarshalByRefObject, ICommunication
    {
        public int Version
        {
            get { return 101; }
        }
   }
}


//------------------------------------------------------------
//КЛИЕНТ
//------------------------------------------------------------
using System;
using System.Collections.Generic;
using System.Windows.Forms;
using MyCommunication;

namespace MyClient
{
    public partial class fMain : Form
    {
        public fMain()
        { 
            InitializeComponent();
        }

        private void fMain_Load(object sender, EventArgs e)
        {
            ICommunication ConfiguratorCom = (ICommunication)Activator.GetObject(typeof(ICommunication), "tcp://localhost:1206/BlaBlaBla");
            int v = ConfiguratorCom.Version;
        }
    }
}

PM MAIL   Вверх
opozdaika
Дата 22.5.2009, 11:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 93
Регистрация: 28.4.2008

Репутация: нет
Всего: нет



Помогите же! Какие бы примеры из сети я ни брал на тему ремоутинга по TCP, на каком бы компьютере ни запускал (XP, Vista), какую бы версию FrameWork ни использовал (от 2.0 до 3.5) -  всё всегда кончается отдим и тем же: ArgumentNullException в CopyToManaged!!!!
PM MAIL   Вверх
opozdaika
Дата 7.7.2009, 14:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 93
Регистрация: 28.4.2008

Репутация: нет
Всего: нет



Сообщаю дополнительные сведения об ошибке "ArgumentNullException в CopyToManaged"
1. Ошибка проявляется только на MS Vista включая SP1 и SP2. На XP и на Windows 7 работает НОРМАЛЬНО
2. Ошибка проявляется только при использовании канала TCP. На канале IPC работает НОРМАЛЬНО
3. Некоторые примеры (особенно в виде консольного приложения) проявляют ошибку по-другому: первое обращение к серверу зависает, последующие проходят нормальрно. 
4. Общим является то, что ПЕРВОЕ обращение и ПОСЛЕДУЮЩИЕ происходят по-разному. То есть:
    -Либо при первом обращении ОК, при втором ArgumentNullException 
    -Либо  при первом обращении - тишина, при втором и последующих - ОК
5. Желающие могут попробовать. Вот ссылка на классический пример (причем довольно старый) от самой Microsoft:
http://msdn.microsoft.com/en-us/library/ms973857.aspx
Кто скомпилирует под Вистой - увидит сам.

PM MAIL   Вверх
PashaPash
Дата 7.7.2009, 16:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1233
Регистрация: 3.1.2008

Репутация: 9
Всего: 49



opozdaika, взял твой пример, вбил в студию, запустил под 2008-м сервером - та же виста - все работает. В примере аттач с исходниками и с бинарниками. Позапускай их.  С некоторой вероятностью у тебя просто битый инсталл висты. UAC включен/выключен? Firewall? Windows Defender? Порт менять пробовал на другой?

ЗЫ Если у тебя что-то "не работает" - ататч полные исходники, а не только текст cs. Всем лень тратить пол часа на разбирательство с чужой проблемой. Тем более что Steve Maine уже потратил - и не смог воспроизвести.

Присоединённый файл ( Кол-во скачиваний: 5 )
Присоединённый файл  RemotingTest.zip 51,72 Kb


--------------------
PM MAIL WWW   Вверх
opozdaika
Дата 7.7.2009, 18:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 93
Регистрация: 28.4.2008

Репутация: нет
Всего: нет



To PashaPash:
Цитата
opozdaika, взял твой пример, вбил в студию, запустил под 2008-м сервером - та же виста - все работает. В примере аттач с исходниками и с бинарниками. Позапускай их.  

Спасибо большое. Твои примеры ведут себя на моем компе точно так же, как и мои примеры. На втором компе с Вистой - точно то же. Твой консольнрый пример ведет себя по типу Б (первый раз виснет), оконный пример - по тпиу А (второй раз валится)
Цитата
С некоторой вероятностью у тебя просто битый инсталл висты. 

Виста фирменная, лицензионная. Но гарантийный срок прошел, поэтому в техподдержку я обратиться не могу.
Причем интегрирован был SP1, затем я обновился до SP2. Горячие обновления тоже включены
Цитата
UAC включен/выключен? 

Включен. Попробую отключить, но надежды мало
Цитата
Firewall? 

Пробовал и так и так
Цитата
Windows Defender? 

Его у меня нет
Цитата
Порт менять пробовал на другой?

пробовал
Цитата
ЗЫ Если у тебя что-то "не работает" - ататч полные исходники, а не только текст cs. Всем лень тратить пол часа на разбирательство с чужой проблемой. 

Прости, не знал, что здесь так принято
Цитата
Тем более что Steve Maine уже потратил - и не смог воспроизвести.

Ты и там побывал smile
PM MAIL   Вверх
PashaPash
Дата 7.7.2009, 19:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1233
Регистрация: 3.1.2008

Репутация: 9
Всего: 49



Цитата(opozdaika @  7.7.2009,  18:50 Найти цитируемый пост)
Прости, не знал, что здесь так принято

Зачем сразу "принято" - просто так подсказывает здравый смысл smile
Доберусь вечером до домашней висты, проверю.
UPD: у меня в коде System.Net.Sockets.AcceptOverlappedAsyncResult.PostCompletion(Int32 numBytes) вызова System.Runtime.InteropServices.Marshal.CopyToManaged вообще нет. Проверь что .net пропатчен до упора. Поставь 3.5 SP1, и апдейты к нему.

Это сообщение отредактировал(а) PashaPash - 7.7.2009, 19:41


--------------------
PM MAIL WWW   Вверх
PashaPash
Дата 8.7.2009, 13:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1233
Регистрация: 3.1.2008

Репутация: 9
Всего: 49



Проверил на Vista SP1 + .NET 3.5 SP1. Не повторяется. Скорее всего дело в драйверах/железе/специфических настройках. Попробуй скачать 30-дневную виртуалку-триал (http://www.microsoft.com/downloads/details.aspx?familyid=C2C27337-D4D1-4B9B-926D-86493C7DA1AA&displaylang=en), и проверить под ней.


--------------------
PM MAIL WWW   Вверх
opozdaika
Дата 8.7.2009, 16:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 93
Регистрация: 28.4.2008

Репутация: нет
Всего: нет



To PashaPash :

Цитата(PashaPash @ 8.7.2009,  13:09)
Проверь что .net пропатчен до упора. Поставь 3.5 SP1, и апдейты к нему.

Скажи пожалуйста, а те экзешники, которые ты выложил, они под какой фреймворк? Как я понимаю, как раз под 3.5 SP1?  А если скомпилируешь под 2.0? Ведь на момент выхода майкросовтовского примера, который мы по существу и компилируем, сущестовал пожалуй только 1.1
Я сейчас не компилирую сам, а тестирую на твоих бинарнкиах, как полученных на независимой стороне.  Есть ли мне в таком случае смысл апгрейдить фреймворк? И где взять последнее обновление?
Цитата
Проверил на Vista SP1 + .NET 3.5 SP1. Не повторяется.

Твои экзешники у меня падают, причем на двух вистах с РАЗНЫХ дистрибутивов. 
Цитата
Попробуй скачать 30-дневную виртуалку-триал

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

Спасибо за помощь!

To All
Был бы благодарен, если бы кто-то еще просто запустил два файла у себя на висте. Просто посмотреть, будет валиться или нет. 
1. Берешь zip-архив от PashaPash (см. его пост чуть ниже)
2. Из архива вытаскиваешь папку RemotingTest\Binaries к себе на винт
3. Запускаешь файл WindowsFormsServer.exe - появляется голое окно (это сервер)
4. Запускаешь файл WindowsFormsClient.exe  - появляется еще одно голое окно (это клиент)
5. Ждешь секунд 5, потом закрываешь клиентское окно. Пока все нормально
6. Ждешь еще секунд 5, запускаешь  WindowsFormsClient.exe во второй раз. Вот тут-то и наступает момент истины. Два окна либо спокойненько продолжают быть на экране, либо оба очень сильно обижаются.

Спасибо.

Присоединённый файл ( Кол-во скачиваний: 4 )
Присоединённый файл  _________________.jpg 60,54 Kb
PM MAIL   Вверх
PashaPash
Дата 8.7.2009, 18:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1233
Регистрация: 3.1.2008

Репутация: 9
Всего: 49



Цитата(opozdaika @  8.7.2009,  16:55 Найти цитируемый пост)
Скажи пожалуйста, а те экзешники, которые ты выложил, они под какой фреймворк? Как я понимаю, как раз под 3.5 SP1?  А если скомпилируешь под 2.0? 

Они под 2.0 - точнее, Remoting есть только под 2.0. Последний сервис пак - http://www.microsoft.com/downloads/details...;displaylang=en.


--------------------
PM MAIL WWW   Вверх
opozdaika
Дата 9.7.2009, 16:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 93
Регистрация: 28.4.2008

Репутация: нет
Всего: нет



Многострадальная проблема резрешилась!!!   smile 
Виновник - клиент ИСА (MS Firewall Client for ISA Server v 4.0)
Он у нас на всех машинах, поэтому падало везде. Но только на Висте.
Как же так? MS Remoting конфликтует с MS Firewall на MS Vista?
Спасибо за участие!

PS. И кстати, WCF (замена ремоутинга) тоже валится на висте в присутствии ISA Client 

Это сообщение отредактировал(а) opozdaika - 17.7.2009, 14:23
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
Partizan
PashaPash

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, Partizan, PashaPash.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | .NET для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0699 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.