| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > .NET для новичков > ArgumentNullException в CopyToManaged |
| Автор: opozdaika 15.5.2009, 18:17 |
| В многопоночном приложении с использованием технологи 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) ------------------------------------------------ Буду благодарен за любую информацию как найти ошибку. Скорее всего где-то у меня потоки криво написаны. Спасибо. |
| Автор: opozdaika 20.5.2009, 13:17 | ||
| Вот глядите, убрал все что можно. Оставил только примитивный ремоутинг по TCP. Есть три сборки: Сервер, Клиент и Объект связи. Этот объект я делал сначала в одной сборке с сервером, потом вылелил в одтельную сборку - ни на что это не влияет. Работает так. Запускаю MyServer.exe, затем запускаю MyClient.exe Пока нормально. Затем я закрываю MyClient.exe и запускаю его еще раз. И тут приходит ArgumentNullException.
|
| Автор: opozdaika 22.5.2009, 11:18 |
| Помогите же! Какие бы примеры из сети я ни брал на тему ремоутинга по TCP, на каком бы компьютере ни запускал (XP, Vista), какую бы версию FrameWork ни использовал (от 2.0 до 3.5) - всё всегда кончается отдим и тем же: ArgumentNullException в CopyToManaged!!!! |
| Автор: opozdaika 7.7.2009, 14:07 |
| Сообщаю дополнительные сведения об ошибке "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 Кто скомпилирует под Вистой - увидит сам. |
| Автор: PashaPash 7.7.2009, 16:20 |
| opozdaika, взял твой пример, вбил в студию, запустил под 2008-м сервером - та же виста - все работает. В примере аттач с исходниками и с бинарниками. Позапускай их. С некоторой вероятностью у тебя просто битый инсталл висты. UAC включен/выключен? Firewall? Windows Defender? Порт менять пробовал на другой? ЗЫ Если у тебя что-то "не работает" - ататч полные исходники, а не только текст cs. Всем лень тратить пол часа на разбирательство с чужой проблемой. Тем более что Steve Maine уже потратил - и не смог воспроизвести. |
| Автор: opozdaika 7.7.2009, 18:50 | ||||||||||||||||
To PashaPash:
Спасибо большое. Твои примеры ведут себя на моем компе точно так же, как и мои примеры. На втором компе с Вистой - точно то же. Твой консольнрый пример ведет себя по типу Б (первый раз виснет), оконный пример - по тпиу А (второй раз валится)
Виста фирменная, лицензионная. Но гарантийный срок прошел, поэтому в техподдержку я обратиться не могу. Причем интегрирован был SP1, затем я обновился до SP2. Горячие обновления тоже включены
Включен. Попробую отключить, но надежды мало
Пробовал и так и так
Его у меня нет
пробовал
Прости, не знал, что здесь так принято
Ты и там побывал |
| Автор: PashaPash 7.7.2009, 19:37 |
Зачем сразу "принято" - просто так подсказывает здравый смысл Доберусь вечером до домашней висты, проверю. UPD: у меня в коде System.Net.Sockets.AcceptOverlappedAsyncResult.PostCompletion(Int32 numBytes) вызова System.Runtime.InteropServices.Marshal.CopyToManaged вообще нет. Проверь что .net пропатчен до упора. Поставь 3.5 SP1, и апдейты к нему. |
| Автор: PashaPash 8.7.2009, 13:09 |
| Проверил на Vista SP1 + .NET 3.5 SP1. Не повторяется. Скорее всего дело в драйверах/железе/специфических настройках. Попробуй скачать 30-дневную виртуалку-триал (http://www.microsoft.com/downloads/details.aspx?familyid=C2C27337-D4D1-4B9B-926D-86493C7DA1AA&displaylang=en), и проверить под ней. |
| Автор: opozdaika 8.7.2009, 16:55 | ||||||
To PashaPash :
Скажи пожалуйста, а те экзешники, которые ты выложил, они под какой фреймворк? Как я понимаю, как раз под 3.5 SP1? А если скомпилируешь под 2.0? Ведь на момент выхода майкросовтовского примера, который мы по существу и компилируем, сущестовал пожалуй только 1.1 Я сейчас не компилирую сам, а тестирую на твоих бинарнкиах, как полученных на независимой стороне. Есть ли мне в таком случае смысл апгрейдить фреймворк? И где взять последнее обновление?
Твои экзешники у меня падают, причем на двух вистах с РАЗНЫХ дистрибутивов.
Буду сегодня и завтра пробовать различные дистрибутивы висты на тестовой машине. И сразу после установки висты буду запускать твой пример. Спасибо за помощь! To All Был бы благодарен, если бы кто-то еще просто запустил два файла у себя на висте. Просто посмотреть, будет валиться или нет. 1. Берешь zip-архив от PashaPash (см. его пост чуть ниже) 2. Из архива вытаскиваешь папку RemotingTest\Binaries к себе на винт 3. Запускаешь файл WindowsFormsServer.exe - появляется голое окно (это сервер) 4. Запускаешь файл WindowsFormsClient.exe - появляется еще одно голое окно (это клиент) 5. Ждешь секунд 5, потом закрываешь клиентское окно. Пока все нормально 6. Ждешь еще секунд 5, запускаешь WindowsFormsClient.exe во второй раз. Вот тут-то и наступает момент истины. Два окна либо спокойненько продолжают быть на экране, либо оба очень сильно обижаются. Спасибо. |
| Автор: opozdaika 9.7.2009, 16:13 |
| Многострадальная проблема резрешилась!!! Виновник - клиент ИСА (MS Firewall Client for ISA Server v 4.0) Он у нас на всех машинах, поэтому падало везде. Но только на Висте. Как же так? MS Remoting конфликтует с MS Firewall на MS Vista? Спасибо за участие! PS. И кстати, WCF (замена ремоутинга) тоже валится на висте в присутствии ISA Client |