Исключение в клиенте WCF - PullRequest
0 голосов
/ 13 февраля 2010

Я использую службу WCF в своем коде, чтобы клиент (WindowsFormsApplication1) захватывал представление рабочего стола и отправлял его на сервер. После этого сервер отправляет изображения в Masterclient (windowsformsApplication2). Работает ... но несколько минут я получил исключение из clientSide, так как ссылка на объект не предназначена для установки экземпляра объекта Как я могу решить эту проблему ....

и это мой код:

public void SendToServerToMainServer(clsImageObject img)
{

        ConnectToServerSettings();
        InterfaceClass.IService serviceobj = Client.CreateChannel();// I   got  exception in This line,And the serviceobj got null Suddenly...
        serviceobj.SendToServerToMasterClient(img, clpro.MyIPAddress);
        Client.Close();
        Client = null;
    }
    }




public void ConnectToServerSettings()
{

        string StrAddress = File.ReadAllText(AppDomain.CurrentDomain.BaseDirectory + "url1.txt");
        //EndpointAddress ea = new EndpointAddress(@"net.tcp://10.0.3.33:2222/ClsPCMain");
        EndpointAddress ea = new EndpointAddress(StrAddress);
        NetTcpBinding binding = new NetTcpBinding(SecurityMode.None, false);
        //binding.TransferMode = TransferMode.Streamed;
        binding.MaxBufferPoolSize = Int32.MaxValue;
        binding.MaxReceivedMessageSize = Int32.MaxValue;
        binding.PortSharingEnabled = true;
        binding.ReceiveTimeout = TimeSpan.MaxValue;
        binding.SendTimeout = TimeSpan.MaxValue;
        binding.OpenTimeout = TimeSpan.MaxValue;
        binding.CloseTimeout = TimeSpan.MaxValue;
        binding.MaxReceivedMessageSize = Int32.MaxValue;
        binding.MaxBufferPoolSize = Int32.MaxValue;
        binding.MaxConnections = Int16.MaxValue;
        binding.ReaderQuotas.MaxArrayLength = Int32.MaxValue;
        binding.ReaderQuotas.MaxBytesPerRead = Int32.MaxValue;
        binding.ReaderQuotas.MaxDepth = Int32.MaxValue;
        binding.ReaderQuotas.MaxNameTableCharCount = Int32.MaxValue;
        binding.ReaderQuotas.MaxStringContentLength = Int32.MaxValue;
        binding.Security.Mode = SecurityMode.None;
        Client = new ChannelFactory<InterfaceClass.IService>(binding, ea);

    }

}

Ответы [ 2 ]

0 голосов
/ 01 апреля 2010

Вы должны очень тщательно закрывать канал и устанавливать нулевые проверки объекта во всем приложении, чтобы избежать исключений нулевых ссылок на объекты.

0 голосов
/ 13 февраля 2010

попробуйте закрыть свой канал после использования

using (InterfaceClass.IService serviceobj = Client.CreateChannel())
{
    serviceobj.SendToServerToMasterClient(img, clpro.MyIPAddress);
    serviceobj.Close();
    Client.Close();
    Client = null;
}

tbh, я не уверен, что этот код чистый. Вы, кажется, используете переменную класса (instance?) Client, которую вы заполняете в 1 методе, а закрываете и очищаете в другом. Без большого переписывания кода, я бы изменил сигнатуру ConnectToServerSettings (), чтобы он возвращал экземпляр клиента, а не помещал его в переменную.

Надеюсь, это поможет,

...