1つのインターフェイスで複数の基本クラスを使用できるかどうかを知りたかっただけです。1つのインターフェイスに2つ(さらに多く)の基本クラスを使用しているという問題に直面しています。最初のものを使用してもまったく問題はありませんが、2番目のものを使用しようとすると、機能しません。
簡単にコードを書き留めます
[ServiceContract(Namespace = "http://bla.ServiceModel.Samples", SessionMode = SessionMode.Required)]
[ServiceKnownType(typeof(ObservableCollection<Models.Model1>))]
[ServiceKnownType(typeof(ObservableCollection<Models.MOdel2>))]
public interface IService
{
[OperationContract]
ObservableCollection<Models.Model1> AccessModel1();
[OperationContract]
ObservableCollection<Models.Model2> AccessModel2(string group);
}
クライアントに接続した後、Model1のコレクションを作成すると正常に機能します。Model2のコレクションを作成しようとすると、単にクラッシュします。内部例外は、「既存の接続がリモートホストによって強制的に閉じられた」です。
Model1と2には異なる情報が含まれていますが、構造は同じです。
根本的な間違いか何か他のものがありますか?
さらに詳しい情報が必要な場合は、大歓迎です!
アップデート
モデルクラスを投稿します。たぶん私はただ盲目で、エラーを見ることができません。
[DataContract]
public class Model2
{
private string status;
private string name;
private string telephone;
public Model2(string sStatus, string sName, string sTelephone)
{
Status = sStatus;
Name = sName;
Telephone = sTelephone;
}
[DataMember(IsRequired = true, Order = 0)]
public string Status
{
get { return status; }
set { status = value; }
}
[DataMember(IsRequired = true, Order = 1)]
public string Name
{
get { return name; }
set { name = value; }
}
[DataMember(IsRequired = true, Order = 2)]
public string Telephone
{
get { return telephone; }
set { telephone = value; }
}
}
internal class Model2Builder: ObservableCollection<Model2>
{
public Model2Builder(string group)
: base()
{
try
{
DataTable dt = new Database().GetModel2Data(group);
foreach (DataRow row in dt.Rows)
{
Add(new Model2(row[0].ToString(), row[1].ToString(), row[2].ToString()));
}
dt.Dispose();
}
catch (Exception ex)
{
//Code for log...
}
}
}