我的WCF服务中有一个简单的类,对于访问我的WCF的客户端似乎没有正确显示。
我的类有4个类型为string的公共属性。
我使用[DataContract()]标记了类,并使用[DataMember]标记了每个成员。
为什么我的构造函数不可见?构造函数是否有特殊的[属性]?
答案 0 :(得分:8)
数据协定与构造函数无关。因此,当您在客户端上创建代理时,您将只获得一个实现数据协定的类。
如果要在客户端添加类似的构造函数(假设生成的类型名为SomeDataItem),则可以使用分部类添加它:
public partial class SomeDataItem
{
public SomeDataItem(int a, int b)
{
A = a;
B = b;
}
}
答案 1 :(得分: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");
}
}
答案 2 :(得分:1)
如何生成客户端代码:VS添加服务参考,SVCUTIL?您使用的参数/设置是什么?您是否查看了客户端代码以查看实际创建的内容?
您的班级是否正常使用?我有一个问题,我创建了一个公开的数据协定类,但没有在服务方法中使用它,因此该类没有导出到客户端代码中。
答案 3 :(得分:0)
将类标记为数据协定时,不需要括号。你能提供你班级的代码样本吗?