我有一个使用BasicHttpBinding的服务引用但是当使用VS生成reference.cs时,现在没有实现RaisePropertyChanged的一些属性(虽然这是可以接受的)并且setter中的逻辑被忽略/删除(这非常不是可接受!)。
我尝试以各种不同的方式配置服务引用并将逻辑放在RaisePropertyChanged事件中,但似乎没有任何事情可以解决这个问题。
任何帮助非常感谢,以下简要说明。
服务中的原始代码
public class Entry : INotifyPropertyChanged
{
private string m_Firstname;
private string m_Foo;
public string Firstname
{
get { return m_Firstname; }
set
{
m_Firstname = value;
Foo = "bar";
OnPropertyChanged("Firstname");
}
}
public string Foo
{
get { return m_Foo; }
set { m_Foo = value; }
}
public event PropertyChangedEventHandler PropertyChanged;
protected void OnPropertyChanged(string propertyName)
{
System.ComponentModel.PropertyChangedEventHandler propertyChanged = this.PropertyChanged;
if ((propertyChanged != null))
{
propertyChanged(this, new System.ComponentModel.PropertyChangedEventArgs(propertyName));
}
}
}
Reference.cs中生成的代码
/// <remarks/>
[System.CodeDom.Compiler.GeneratedCodeAttribute("System.Xml", "4.6.1586.0")]
[System.SerializableAttribute()]
[System.Diagnostics.DebuggerStepThroughAttribute()]
[System.ComponentModel.DesignerCategoryAttribute("code")]
[System.Xml.Serialization.XmlTypeAttribute(Namespace="http://www.domain.com/")]
public partial class Entry : object, INotifyPropertyChanged {
private string firstnameField;
private string foo;
/// <remarks/>
[System.Xml.Serialization.XmlElementAttribute(Order=1)]
public string Firstname {
get { return this.preferredContactMethodField; }
set {
this.firstnameField = value;
this.RaisePropertyChanged("Firstname");
}
}
/// <remarks/>
[System.Xml.Serialization.XmlElementAttribute(Order=2)]
public string Foo {
get { return this.foo; }
set {
this.foo= value;
this.RaisePropertyChanged("Foo");
}
}
public event System.ComponentModel.PropertyChangedEventHandler PropertyChanged;
protected void RaisePropertyChanged(string propertyName) {
System.ComponentModel.PropertyChangedEventHandler propertyChanged = this.PropertyChanged;
if ((propertyChanged != null)) {
propertyChanged(this, new System.ComponentModel.PropertyChangedEventArgs(propertyName));
}
}
}
请注意,在Firstname setter中设置Foo的尝试已经消失,并且出现了Foo setter中的RaisePropertyChanged。
据我所知,这是生成Reference.cs文件的过程的一部分,我无法做任何事情来让我的原始代码通过 - 尤其是设置Foo的尝试,是那是对的吗?
提前致谢
答案 0 :(得分:0)
添加服务引用时,将从服务接口自动生成客户端类型。您的特定逻辑是内部实现的一部分,服务客户端对此一无所知。
如果您想在客户端中使用此行为,则不应手动更改生成的代码。每当您更新参考时,它都会被覆盖。
唯一可行的解决方案是在单独的程序集中隔离服务类型,并在服务引用中使用此程序集。为此,在创建或更新引用时单击高级... 按钮,并在打开的对话框中包含程序集,方法是将其添加到&#34;使用这些程序集的类型&#34; 34;名单。