0

AzureWCFアプリケーションをプログラミングしています。

以下のように定義されたデータ契約:
[DataContract]
public class UserInfo
{
[DataMember]
public string UserName { get; set; }
[DataMember]
public int UserID { get; set; }
[DataMember]
public bool IsOnline { get; set; }
}

次に、WCFサービスでデータコントラクトを定義します。

[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を参照してください。

この問題の解決策を見つけることができません。助けてください。

4

1 に答える 1

0

問題の根本的な原因を見つけたと思いますが、理由はわかりません。

この問題は、サービスコントラクトのネームスペース属性が原因で発生します。

サービスコントラクトインターフェイスとデータコントラクトインターフェイスの名前空間を設定しませんでした。デフォルトで設定されていて問題ないと思いました。しかし実際には、このスレッドの問題は名前空間属性が原因で発生します。サービスコントラクトとデータコントラクトの両方に名前空間属性を設定しました。もちろん同じ名前空間ですが、機能しました。問題は二度と起こりません。

しかし、なぜこの問題が発生したのかわかりません。名前空間を設定しないと、デフォルト値の「http://tempuri.org」になりますね。

于 2012-07-16T02:18:55.527 に答える