C# WCF客户端对象反序列化通知
我有一个WPF客户端应用程序,通过对远程WCF服务的引用来接收对象。WCF服务引用是通过Visual Studio的“添加服务引用…”生成的C# WCF客户端对象反序列化通知,c#,wpf,wcf,.net-4.0,C#,Wpf,Wcf,.net 4.0,我有一个WPF客户端应用程序,通过对远程WCF服务的引用来接收对象。WCF服务引用是通过Visual Studio的“添加服务引用…”生成的 每次从WCF服务接收/反序列化对象时,我都希望执行一段代码。该对象需要已经被反序列化,以便我可以读取它的属性/调用方法。此解决方案将是全局的,而不是我需要添加到每个WCF服务调用中的内容。您可以使用OnDeserialized属性: 从迈克最初的回答开始,我想出了以下解决方案 背景 客户端通过WCF服务从服务器提取数据 WCF服务引用是由Visual St
每次从WCF服务接收/反序列化对象时,我都希望执行一段代码。该对象需要已经被反序列化,以便我可以读取它的属性/调用方法。此解决方案将是全局的,而不是我需要添加到每个WCF服务调用中的内容。您可以使用OnDeserialized属性:
从迈克最初的回答开始,我想出了以下解决方案 背景
[DataContract]
public class DataTransferObject : INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
[OnDeserialized]
public void OnDeserialized(StreamingContext context)
{
dynamic app = Application.Current;
if(app != null) //Prevents execution on server-side. This code is meant to only execute at the client
{
PropertyChanged += (sender, args) =>
{
app.IsAnythingDirty = true;
};
}
}
}
按键
我不明白这个问题。您是否正在寻找有人这样做的代码示例?你能更具体地说明你的意图吗?我想让这个问题尽可能一般化。我正在寻找关于在哪里可以挂接到WCF工作流(某个地方的属性?行为?)的指导。具体来说,我想订阅进入系统的每个对象的INotifyPropertyChanged.PropertyChanged事件,以便确定用户是否修改了任何传入对象。我看到了。看看Mike的答案……它可能正是您想要的。这与我想要的很接近,但需要将代码放在通过线路发送的类型中(我使用的是“在引用的程序集中重用类型”)。如果代码在此共享代码中,则它无权访问我的WPF/客户端应用程序中的任何信息。您是否控制服务代码以及客户端?如果是,您可以将数据传输对象(和契约)放置在它们自己的程序集中,并直接在客户机上引用它,而不是在VisualStudio中使用Add Service reference。您可以使用它来生成客户机配置(这通常有点容易出错)。但在引用的程序集中使用合同类型的ChannelFactory。或者,如果您无权访问服务代码,您可以使用“添加服务引用”生成代理类,然后将代码粘贴到您自己的类中,并添加相关方法来处理反序列化事件。不幸的是,我无法使用代理生成和调整代理,因为我需要能够从service1接受对象并通过service2将其发送回(因此,“重用类型”选项)我明白了。我想你可以定义一个共享代码引用的接口,并在WPF客户端中实现它,也许可以使用IoC模式将客户端的类型注入共享代码中,但这一切都变得有点混乱……对我来说,这是一个很好的、实用的解决方案。如果你自己托管服务,应用程序会吗。当前的st我会是空的吗?