如何在代理类中正确指定复杂类型?

时间:2012-05-23 09:47:14

标签: c# wcf

我在服务器上有一个 ServiceContract ,如下所示:

[ServiceContract]
public interface ICheckService
{
    [OperationContract]
    IEnumerable<Message> CheckInbox(string user);
}

我将上述定义复制到客户端上的代理类

[ServiceContract]
public interface ICheckService
{
    [OperationContract]
    IEnumerable<Message> CheckInbox(string user);
}

当我编译客户端时,出现以下错误:

The type or namespace name 'Message' could not be found (are you missing a using directive or an assembly reference?) (CS0246)

Message.cs

public class Message
{
    public int message_id;
    public string message_from;
    public string message_to;
    public string message_text;
    public DateTime message_time;
}

这是DataContracts发挥作用的地方吗?如果是这样,我应该在ServiceContract定义中修改什么?

注意:ServiceContract有其他的OperationContracts,它们返回简单的数据类型并且正在工作。

2 个答案:

答案 0 :(得分:2)

[DataContract]
public class Message{
[DataMember]
public String Sender{get;set;}
//etc - not sure what your message class contains
}

类似的东西:)

答案 1 :(得分:1)

请注意,WCF是一个消息通信框架,这些消息是DataContracts,换句话说,它们是由DataContract属性修饰的类,以便通知{{1}来自此类的此对象将通过服务进行通信或传播。在您的示例中,您要向客户端发送一组对象,然后此WCF应为class,并且应为客户端显示的属性应使用DataContract属性进行修饰

DataMember

因此,您应该修改合同 [DataContract] public class Message { [DataMember] public string Name{get;set;} } 而不是服务合同