gpt4 book ai didi

c# - 'System.ComponentModel.PropertyChangedEventHandler' 不能派生自特殊类 'System.MulticastDelegate'

转载 作者:太空狗 更新时间:2023-10-29 23:11:54 26 4
gpt4 key购买 nike

我正在按照建议开发 wcf 服务 here .它解决了我最初在开发原始 .NET 2.0 Web 服务时遇到的 namespace 冲突问题,但我又遇到了另一个问题。

我试图传递给 wcf 服务的对象在客户端中用于聚合来自用户的大量信息,并且它的一些字段数据绑定(bind)到 ui 控件(因此实现 PropertyChangedEventHandler)。当我尝试在我的客户端项目中编译由 svcutil 生成的代理时,我收到标题为该问题的错误。

从这个对象中提取所有数据并放入一个类中进行发送(然后重建原始类型)似乎是多余的 - 更不用说要花很长时间了。

有解决办法吗?

最佳答案

我可以检查吗?您是否将委托(delegate)传递给网络服务?那行不通……它*无法序列化。充其量,ADO.NET 数据服务 (.NET 3.5SP1) 可以通过将 Expression 转换为查询字符串来执行类似的操作...但这是您所能达到的最接近的结果。除此之外,您必须构建一个请求对象,用常规属性封装您的意图。

这适用于任何 web 服务、wcf 服务、tcp 等。

*=委托(delegate)本质上是一个类型安全的方法句柄(带有一个可选的目标(实例)引用);例如,它可以表示为 xml


(编辑)

根据评论 - 可能只是您没有归因于您的数据契约(Contract);这意味着它必须推断契约(Contract)(而且它经常会出错)。例如:

[DataContract]
class Foo : IWhateverInterfaces {
[DataMember]
public string Bar {get;set;}

[DataMember]
public int Baz {get;set;}

public float NotPartOfTheContract {get;set;}

public event EventHandler AlsoNotPartOfTheContract;
}

当使用 [DataContract] 时,只有标记为 [DataMember] 的成员被序列化 - 所以该事件应该被忽略。这曾经是执行 WCF 数据契约(Contract)的唯一方式,但 MS 对其进行了调整以从字段中推断契约(Contract)...IMO 的一个错误,因为它会导致您刚刚遇到的问题...

关于c# - 'System.ComponentModel.PropertyChangedEventHandler' 不能派生自特殊类 'System.MulticastDelegate',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/957474/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com