...ist nicht als serialisierbar gekennzeichnet. ???

06/04/2009 - 17:37 von Volkan Senguel | Report spam
Hallo zusammen, wir benötigen hier Zugriff auf ein Element vom Typ
List<Queue_Data> (Eigenes Object) welches auf einem Server làuft.
Dieser stellt diverse Zahlen für verschieden Dinge bereit > Queues

Auf dem Servr werden die Daten so angeboten:

==using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Diagnostics;
using System.Linq;
using System.ServiceProcess;
using System.Text;
using System.Runtime.Remoting;
using System.Runtime.Remoting.Channels;
using System.Runtime.Remoting.Channels.Tcp;

using InboundQueueEIC_clientCom;
using infoDashboard_Objects;

namespace infoDashboard_QueueStatsService_EIC
{
public partial class QueueStatsService : ServiceBase
{
public QueueStatsService()
{
InitializeComponent();
}

protected override void OnStart(string[] args)
{

TcpChannel tcpChannel = new TcpChannel(9998);
ChannelServices.RegisterChannel(tcpChannel);

Type commonInterfaceType = Type.GetType("Queues");
RemotingConfiguration.RegisterWellKnownServiceType(commonInterfaceType,
"QueueStats", WellKnownObjectMode.Singleton);

InboundQueueEIC_clientCom.BusinessLogic.startServer();
}

protected override void OnStop()
{
InboundQueueEIC_clientCom.BusinessLogic.DisconnectFromEICServer();
}
}
}


public interface QueuesInterface
{
System.Collections.Generic.List<infoDashboard_Objects.Queue_Data>
GetQueueStats();
}

public class Queues : MarshalByRefObject, QueuesInterface
{
public System.Collections.Generic.List<infoDashboard_Objects.Queue_Data>
GetQueueStats()
{
return InboundQueueEIC_clientCom.BusinessLogic.lQueue;
}
}
==
Die Daten werden auch in der List schönd gespeichert und mittels einer Test
App zugànglich.

Ich muss nun aber dies von einigen Clients machen und habe hierfür in einer
TestApp diesen Code mal implementiert um das ganze zu testen

==using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

using System.Runtime.Remoting;
using System.Runtime.Remoting.Channels;
using System.Runtime.Remoting.Channels.Tcp;
using infoDashboard_Objects;

namespace _TestAppRemotingClient
{
public partial class Client : Form
{
List<Queue_Data> queues = new List<Queue_Data>();

public Client()
{
InitializeComponent();
}

private void Client_Load(object sender, EventArgs e)
{
TcpChannel tcpChannel = new TcpChannel();
ChannelServices.RegisterChannel(tcpChannel);
}


Type requiredType = typeof(MovieTicketInterface);

private void button1_Click(object sender, EventArgs e)
{
try
{
QueuesInterface remoteObjectQueues =
(QueuesInterface)Activator.GetObject(requiredType,
"tcp://PC001:9998/QueueStats");
queues = remoteObjectQueues.GetQueueStats();
}
catch (Exception exp)
{
textBox1.Text = "Connection to Server lost...";
}
}
}
}

public interface QueuesInterface
{
System.Collections.Generic.List<infoDashboard_Objects.Queue_Data>
GetQueueStats();
}
==
Ich bekomme aber immer diese Fehlermeldung pràsentiert:

"Der Typ "infoDashboard_Objects.Queue_Data" in Assembly
"infoDashboard_Objects, Version=1.0.0.0, Culture=neutral,
PublicKeyToken=null" ist nicht als serialisierbar gekennzeichnet."

Mit einem String oder Datetime etc. klappt das ganze wunderbar.

Die kriege ich es dazu damit mein Object auch Serialisierbar wird?

Danke für jeden Tip
Volkan
 

Lesen sie die antworten

#1 Karsten Samaschke
06/04/2009 - 17:53 | Warnen spam
Volkan Senguel schrieb:

Die kriege ich es dazu damit mein Object auch Serialisierbar wird?



Entweder ISerializable implementieren, oder [Serializable] über die
Klassendeklaration schreiben und hoffen, dass die Standard-Formatter
damit klarkommen. ;-)

Mit freundlichen Gruessen / Best regards,

Karsten Samaschke
IT-Consulting, IT-Training, IT-Development
Web: http://www.ksamaschke.de
Blog: http://www.karsan.de
Family: http://www.familyblogger.de
Community: http://www.aspnetzone.de

Sent via MacBook / OS X 10.5 (Leopard)

Ähnliche fragen