2012-05-23 30 views
0

我有一个的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。

+0

是消息类内置的Message类或者是一个自定义类? – SCB

+0

@SCB:这是一个自定义类。我现在包括它的定义。 – Animesh

+0

正常,检查@克里斯回答以下。这应该是你需要的 – SCB

回答

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

类似的东西:)

1

记住WCF是消息通信框架,这些消息是DataContracts,换句话说,它们是由DataContract属性的装饰类,以便通知WCF这来自这个班级的对象将通过该服务进行交流或旅行。在您的例子您发送一组对象到客户端,那么这个class应该是那些被认为是可见的客户端应该DataMember属性来装饰一个DataContract和属性。

[DataContract] 
public class Message 
{ 
    [DataMember] 
    public string Name{get;set;} 
} 

因此,你应该修改合同的Message,而不是服务合同