我的WCF服务中有一个简单的类,它似乎没有正确显示访问我的WCF的客户端.
我的类有4个类型为string的公共属性.
我使用[DataContract()]标记了类,并使用[DataMember]标记了每个成员.
为什么我的构造函数不可见?构造函数是否有特殊的[属性]?
数据契约与构造函数没有任何关系.因此,当您在客户端上创建代理时,您将只获得实现数据协定的类.
如果要在客户端添加类似的构造函数(假设生成的类型名为SomeDataItem),则可以使用分部类添加它:
public partial class SomeDataItem
{
public SomeDataItem(int a, int b)
{
A = a;
B = b;
}
}
Run Code Online (Sandbox Code Playgroud)
小智 6
同意您可以将部分类添加到WCF客户端应用程序 - 您还可以将[OnDeserializing]和[OnDeserialized]方法添加到服务器端类以处理初始化等.
当我在寻找如何解决这个问题时,找到了以下很好的例子 - http://social.msdn.microsoft.com/forums/en-US/wcf/thread/447149d5-b44c-47cd-a690-20928244b52b /
[DataContract]
public class MyClassWithSpecialInitialization
{
List<string> myList;
string str1;
[DataMember]
public string Str1
{
get { return str1; }
set
{
this.myList.Add(value);
str1 = value;
}
}
string str2;
[DataMember]
public string Str2
{
get { return str2; }
set
{
this.myList.Add(value);
str2 = value;
}
}
public MyClassWithSpecialInitialization()
{
this.myList = new List<string>();
}
[OnDeserializing]
public void OnDeserializing(StreamingContext context)
{
Console.WriteLine("Before deserializing the fields");
this.myList = new List<string>();
}
[OnDeserialized]
public void OnDeserialized(StreamingContext context)
{
Console.WriteLine("After deserializing the fields... myList should be populated with the values of str1 and str2");
}
}
Run Code Online (Sandbox Code Playgroud)