3

私はWCFの初心者で、次の2つの方法でサービスを作成しました。

[ServiceContract]
public interface IDB
{
    [OperationContract]
    DbResponse<Student> AddStudent(string pnr, string firstName, string lastName, string userName, string email, string cls);

    [OperationContract]
    DbResponse<List<Student>> FindStudent(string searchString);
}

DbResponse はジェネリック クラスです。

[DataContract]
public class DbResponse<T>
{
    [DataMember]
    public DbStatus Status { get; set; }
    [DataMember]
    public string Message { get; set; }
    [DataMember]
    public T Data { get; set; }
}

ここで、DbStatus は列挙型です。

[DataContract]
public enum DbStatus
{ 
    [EnumMember]
    Ok,
    [EnumMember]
    Warning,
    [EnumMember]
    Failed
};

これは正常に機能しますが、クライアント側では、DbResponse にジェネリック プロパティを追加したため、以下を使用できなくなりました。

string filter = "Foo";
DBClient dbc = new DBClient();
WebInterface.Services.DbResponse response = dbc.FindStudent(filter);

代わりに、Intellisense によると、奇妙に見える (そして醜い) タイプを使用する必要があります。

WebInterface.Services.DbResponseOfArrayOfStudentL1_PcKk2u response = dbc.FindStudent(filter);

なぜこれが起こるのか、そして「よりクリーンな」型名を使用できるかどうか(およびその方法)について誰かが光を当てることができれば、非常に感謝しています。

4

1 に答える 1