服务没有';t实现属性';s获取/设置方法
本文关键字:获取 方法 设置 服务 实现 属性 | 更新日期: 2023-09-27 18:21:09
我的Silverlight应用程序中的服务引用管理器用泛型方法替换属性的get和set方法时遇到问题。
我的例子:我的服务中有一个Rule类,它有三个公共属性,都使用同一个私有成员。
[DataContract]
public class RulesReadable
{
[DataMember]
private bool? m_passed;
...
[DataMember]
public bool? State
{
get { return m_passed; }
set { m_passed = value; }
}
[DataMember]
public bool HasPassed
{
get { return (m_passed == true) ? true : false; }
set { m_passed = value; }
}
[DataMember]
public bool HasFailed
{
get { return (m_passed == false) ? true : false; }
set { m_passed = !value; }
}
}
当我调用该服务时,取回该数据类型,并尝试获取/设置属性。我发现每个属性都有自己的变量,而不是在三个属性之间共享一个。如果我在Silverlight端查看类的定义,我会发现这实际上就是发生的事情:
[System.Diagnostics.DebuggerStepThroughAttribute()]
[System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "4.0.0.0")]
[System.Runtime.Serialization.DataContractAttribute(Name="Manager.RulesReadable", Namespace="http://schemas.datacontract.org/2004/07/MyWebApp.Services")]
public partial class ManagerRulesReadable : object, System.ComponentModel.INotifyPropertyChanged {
private bool HasFailedField;
...
[System.Runtime.Serialization.DataMemberAttribute()]
public bool HasFailed {
get {
return this.HasFailedField;
}
set {
if ((this.HasFailedField.Equals(value) != true)) {
this.HasFailedField = value;
this.RaisePropertyChanged("HasFailed");
}
}
}
...
}
如何使Silverlight端的类表现得像服务端的类?
首先添加这些类所在的程序集作为Silverlight项目的引用。创建服务引用时,选中"重用引用程序集中的类型"复选框,然后重用所有引用的程序集,或者选择要重用的特定程序集。服务直接引用的程序集(以及任何依赖项)也将成为Silverlight应用程序的一部分。
不要使用服务引用。他们是邪恶的。如果你在谷歌上搜索"Silverlight WCF without Service Reference",你会发现一些不错的教程。