2012-05-23 56 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,而不是服務合同