0
我遇到了一個有趣的情況,在我的WCF webservice中,我遇到了在IIS中運行的本地部署應用程序與在Azure上運行的已部署Web角色之間的不同行爲。WCF序列化陷阱 - 不同的行爲Azure Web角色VS IIS
我已經定義爲一類這樣的
[DataContract]
public class DefaultClassView : BaseView
{
[DataMember]
public Guid ClassID { get; set; }
[DataMember]
public string Name { get; set; }
[DataMember]
public Guid SchoolID { get; set; }
[DataMember]
public string SchoolName { get; set; }
[DataMember]
public IEnumerable<Guid> YearLevelIDs { get; set; }
[DataMember]
public IEnumerable<string> YearLevelNameList { get; set; }
[DataMember]
public IEnumerable<Guid> SubjectIDs { get; set; }
[DataMember]
public IEnumerable<string> SubjectNameList { get; set; }
}
然後該類使用下面的代碼
public static DefaultClassView ConvertToView(this Class entity)
{
return new DefaultClassView()
{
ClassID = entity.ClassID,
Name = entity.Name,
YearLevelIDs = entity.Students.Select(o => o.YearLevelID).Distinct(),
YearLevelNameList = entity.Students.Select(o => o.YearLevel.Name).Distinct(),
SchoolID = entity.SchoolID,
SchoolName = entity.School.Name,
SubjectIDs = entity.Subjects.Select(o => o.SubjectID),
SubjectNameList = entity.Subjects.Select(o => o.Name)
};
}
此代碼得很完美(而部署在我的本地IIS實例)填充,直到我將其部署到Azure上,此時服務被激活時,我開始收到以下錯誤。
Type System.Linq.Enumerable+WhereSelectEnumerableIterator`2[Model.Subject,System.Guid]' cannot be serialized. Consider marking it with the DataContractAttribute attribute, and marking all of its members you want serialized with the DataMemberAttribute attribute.
在去除LINQ查詢我是能夠成功地解決這個問題,但我想明白的是爲什麼這種行爲是兩個平臺之間如此不同,如果INFACT此行爲是設計,我的d還想知道是否還有其他類似的「需要注意的問題」與在Azure上部署WCF服務有關?
對不起,我想我不清楚,我明白,事實上,這正是我如何解決這個問題。我不明白的是爲什麼這兩種平臺之間的行爲不同。 –
這是由於本地訪問服務與遠程服務器。 –