我已經創建了ServiceStack一個Web服務,它返回列表<SyncUserDTO>
創建。 它有更多的屬性,但我將它簡化爲一個字段Timestamp。構造不代理類添加服務引用
[DataContract]
public class SyncUserDTO
{
public SyncUserDTO()
{
Timestamp = new TimestampDTO();
}
[DataMember(Order = 1)]
public TimestampDTO Timestamp { get; set; }
}
[DataContract]
public class TimestampDTO
{
[DataMember]
public bool DataValid { get; set; }
[DataMember]
public DateTime? Value { get; set; }
}
服務似乎(與其他測試)完美地工作,但是當我創建一個客戶端控制檯應用程序,添加服務參考,SyncUserDTO不具備構造函數,這意味着這不起作用:
static void SendUsersServiceReference()
{
var users = new List<SyncUserDTO>();
for (var i = 0; i < 5; i++)
{
var user = new SyncUserDTO();
user.Timestamp.Value = DateTime.Now; // NullReferenceException,
user.Timestamp.DataValid = true; // as Timestamp is null
}
}
當SyncUserDTO按下F12鍵,我似乎無法找到任何Reference.cs構造方法,解釋爲什麼上面不起作用。
偏偏是構造不是在客戶端應用程序在我的代理類產生的?
我需要做客戶端的「建設」自己,然後它的工作原理:
var user = new SyncUserDTO() { Timestamp = new TimestampDTO() };
原因,我不希望誰消費我的服務有人們創造這個自己。他們應該真的注意底層的TimestampDTO。構造函數應該這樣做。
順便說一句,我搜索谷歌和SO之類的字詞「構造不代理類與創建添加服務引用」有和無「ServiceStack」,沒有結果,以幫助我在這個任務......
PS,裸露在我身邊,這是我的第一個問題:)請告訴我該改進什麼問題。
PPS。 Demis(ServiceStack),如果你正在閱讀這篇文章,是的SOAP正在出路,REST是新的黑人 - 但我想支持兩者,這看起來像ServiceStack,這真的很棒。我愛ServiceStack:d
嗯,我嘗試了一個更多的搜索...找到這個... 是的,這是預期的行爲。 MVC網站實際上並未使用您的PageNavigation類。它是包含所有屬性的簡單副本(在添加Web服務引用時生成),但不包括構造函數在內的所有方法。 http://stackoverflow.com/questions/4750267/class-constructor-from-c-sharp-web-service-wont-auto-implement-properties-in 爲什麼不能複製方法也? – SvendK