Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Последние темы форума

Показать новые сообщения »

Почтовая рассылка

Подписчиков: 11634
Последний выпуск: 19.06.2015

ArgumentNullException в CopyToManaged - нулевой параметр "source"

47K
15 мая 2009 года
opozdaika
6 / / 15.05.2009
В многопоночном приложении с использованием технологи 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)
------------------------------------------------

Буду благодарен за любую информацию как найти ошибку. Скорее всего где-то у меня потоки криво написаны.
Спасибо.
7
16 мая 2009 года
hardcase
4.5K / / 09.08.2005
Покажите код. По трассировке стека трудно сказать в чем ошибка.... возможно с того конца как-то неправильно записываются данные.
47K
20 мая 2009 года
opozdaika
6 / / 15.05.2009
Вот глядите, убрал все что можно. Оставил только примитивный ремоутинг по TCP.
Есть три сборки: Сервер, Клиент и Объект связи. Этот объект я делал сначала в
одной сборке с сервером, потом вылелил в одтельную сборку - ни на что это не
влияет.
Работает так. Запускаю MyServer.exe, затем запускаю MyClient.exe Пока нормально.
Затем я закрываю MyClient.exe и запускаю его еще раз. И тут приходит
ArgumentNullException.

FrameWork 2.0 Windows Vista

Код:
//-------------------------------------------------------------
//СЕРВЕР
//-------------------------------------------------------------
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;
        }
    }
}
47K
22 мая 2009 года
opozdaika
6 / / 15.05.2009
Помогите же! Какие бы примеры из сети я ни брал на тему ремоутинга по TCP, на каком бы компьютере ни запускал (XP, Vista), какую бы версию FrameWork ни использовал (от 2.0 до 3.5) - всё всегда кончается отдим и тем же: ArgumentNullException в CopyToManaged!!!!
47K
07 июля 2009 года
opozdaika
6 / / 15.05.2009
Сообщаю дополнительные сведения об ошибке "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
Кто скомпилирует под Вистой - увидит сам.
47K
09 июля 2009 года
opozdaika
6 / / 15.05.2009
Многострадальная проблема резрешилась!!!
Виновник - клиент ИСА (MS Firewall Client for ISA Server v 4.0)
Он у нас на всех машинах, поэтому падало везде. Но только на Висте.
Как же так? MS Remoting конфликтует с MS Firewall на MS Vista?

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

Знаете кого-то, кто может ответить? Поделитесь с ним ссылкой.

Ваш ответ

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог