2012-07-13 28 views
0

我正在編程一個Azure WCF應用程序。序列化時發生WCF回調錯誤

一個datacontract定義如下:
[DataContract]
public class UserInfo
{
[DataMember]
public string UserName { get; set; }
[DataMember]
public int UserID { get; set; }
[DataMember]
public bool IsOnline { get; set; }
}

然後我在WCF服務定義datacontract:

[DataContract(Name="UserInfo")]
public class ServiceUserInfo : UserInfo
{
[IgnoreDataMember]
public ICallback Callback { get; set; }
}

服務合同中

然後,它會回調到客戶端,該方法如下

private void NoticeUsers(UserInfo currentuser)
{
var users = UserManager.GetAllActiveUsers();
foreach (var user in users)
{
if (user.UserName == currentuser.UserName)
continue;
user.Callback.UpdateUserList(currentuser);
}
}

其實我將一個ServiceUserInfo對象作爲參數傳遞給NoticeUsers方法。然後會發生如下錯誤:

嘗試序列化參數http://tempuri.org/:user時發生錯誤。 InnerException消息是'類型'WCFServiceWebRole.ServiceUserInfo',數據協定名稱'UserInfo:http://schemas.datacontract.org/2004/07/WCFServiceWebRole'不是預期的。考慮使用DataContractResolver或將任何不知道的類型靜態添加到已知類型列表中 - 例如,通過使用KnownTypeAttribute屬性或將它們添加到傳遞給DataContractSerializer的已知類型列表中。有關更多詳細信息,請參閱InnerException。

我無法找到此問題的解決方案。請幫助。

回答

0

我想我找到了問題的根源,但是我不知道爲什麼。

問題是由服務合同的名稱空間屬性造成的。

我沒有設置我的服務契約接口和數據契約接口的名稱空間。我認爲它會被默認設置,它不會導致任何問題。但實際上這個線程的問題是由Namespace屬性造成的。我爲服務契約和數據契約設置了名稱空間屬性,當然是相同的名稱空間,然後它就起作用了。這個問題再也沒有發生過。

但是,我不知道爲什麼會造成這個問題。如果我沒有設置命名空間,它將是默認值「http://tempuri.org」,不是嗎?

相關問題