C# 在远程处理期间使用事件更新GUI
我正试图了解.NET远程处理,试图在.NET中复制VB6 ActiveX EXE 到目前为止,我在服务器上实例化了一个所有客户端都可以共享的单例 singleton接受来自客户端的请求并验证数据,以事件的形式返回验证后的数据。这很好地工作——请求引用单例的类触发了它们的事件——也就是说,它们发送数据,接收经过验证的数据 但是,我需要一个接口。客户端托管在WPF应用程序中(服务器也是),当它们接收数据时,我需要更新显示(文本框、列表框等),以反映客户端和sinlgleton之间的通信 但是,一旦我添加了在mainform中实现的事件,以便客户端在收到Singleton的回复后调用,我就会遇到运行时错误,抱怨mainform没有序列化属性 为了保持简洁,我将描述以下过程 服务器使用以下代码运行:C# 在远程处理期间使用事件更新GUI,c#,.net,singleton,.net-remoting,C#,.net,Singleton,.net Remoting,我正试图了解.NET远程处理,试图在.NET中复制VB6 ActiveX EXE 到目前为止,我在服务器上实例化了一个所有客户端都可以共享的单例 singleton接受来自客户端的请求并验证数据,以事件的形式返回验证后的数据。这很好地工作——请求引用单例的类触发了它们的事件——也就是说,它们发送数据,接收经过验证的数据 但是,我需要一个接口。客户端托管在WPF应用程序中(服务器也是),当它们接收数据时,我需要更新显示(文本框、列表框等),以反映客户端和sinlgleton之间的通信 但是,一旦我
BinaryClientFormatterSinkProvider clientProvider = new BinaryClientFormatterSinkProvider();
BinaryServerFormatterSinkProvider serverProvider = new BinaryServerFormatterSinkProvider();
//
IDictionary myDictionary = new Hashtable();
myDictionary["name"] = String.Format("PracticonChannel_{0}", Port);
myDictionary["typeFilterLevel"] = TypeFilterLevel.Full;
myDictionary["port"] = Port.ToString();
serverProvider.TypeFilterLevel = TypeFilterLevel.Full;
http = new HttpChannel(myDictionary, clientProvider, serverProvider);
// Register RemotingShared.SingletonObject as a
// Singleton Server-Activated type.
RemotingConfiguration.RegisterWellKnownServiceType(
typeof(Practicon.RemotingShared.UploadObjectSingleton), // Server-activated type
"SingletonService", // objectUri
WellKnownObjectMode.Singleton // Singleton instancing mode
);
RemotingConfiguration.ApplicationName = " Upload Server";
RemotingConfiguration.RegisterActivatedServiceType(
typeof(Practicon.RemotingShared.UploadObjectSingleton));
客户端通过以下方式获得服务器激活的单例:
HttpChannel http1;
// Set the formatters of the messages for delivery.
BinaryClientFormatterSinkProvider clientProvider = new BinaryClientFormatterSinkProvider();
BinaryServerFormatterSinkProvider serverProvider = new BinaryServerFormatterSinkProvider();
//
IDictionary myDictionary = new Hashtable();
myDictionary["name"] = String.Format("PracticonChannel_{0}", Port);
myDictionary["typeFilterLevel"] = TypeFilterLevel.Full;
myDictionary["port"] = port.ToString();
serverProvider.TypeFilterLevel = TypeFilterLevel.Full;
http1 = new HttpChannel(myDictionary, clientProvider, serverProvider);
ChannelServices.RegisterChannel(http1, false);
uploadObj= (UploadObjectSingleton)Activator.GetObject(
typeof(UploadObjectSingleton),
fullAddress);
//---------- Here's the problem...
uploadObj.ReplyEvent += new UploadObjectReplyEventHandler(OnUploadReply);
OnUploadReply是一个表单实现的事件,用于更新各种控件。当在运行时分配该属性时,由于mainform缺少Serialization属性,会发生序列化异常
这让我快发疯了。有人能给我演示/解释/告诉/说教/教训我如何更新用户界面以响应单例事件吗?好的,答案是使用WCF。这并不像听起来那么可怕,我的解决方案比我想象的要好 我要向那些试图做我所面临的事情的人强调的是:
顺便说一句,我对布拉姆的建议投了赞成票。好的,答案是使用WCF。这并不像听起来那么可怕,我的解决方案比我想象的要好 我要向那些试图做我所面临的事情的人强调的是: