1

同じソリューションに Web サービスと Web サイト (どちらも C#) があります (今のところ)。ソリューションにはクラス ライブラリもあります。Web サービスと Web サイトの両方がこのクラス ライブラリを参照します。

Web サービスには、ライブラリからオブジェクトを作成して返す WebMethod があります。ウェブサイトはこれを呼び出し、それを Trainer オブジェクトに入れようとします (もう一度、同じライブラリから)

    ProFitWebService.Service serviceConn = new ProFitWebService.Service();
    ProFitLibrary.Trainer authenticatedTrainer = (ProFitLibrary.Trainer)serviceConn.GetAuthenticatedTrainer(_TrainerLogin.UserName);

ただし、「タイプ ProFitWebService.Trainer を ProFitLibrary.Trainer に変換できません」が発生します。

ここにWebメソッドがあります:

[WebMethod]
public ProFitLibrary.Trainer GetAuthenticatedTrainer(string email)
{
    ProFitLibrary.Trainer returnTrainer = new ProFitLibrary.Trainer();
    SqlCommand cmd = new SqlCommand("SELECT * FROM Trainers WHERE EmailAddress = '" + email + "'", conn);
    conn.Open();

    SqlDataReader reader;
    reader = cmd.ExecuteReader();

    while (reader.Read())
    {
        returnTrainer.TrainerId = reader.GetInt32(reader.GetOrdinal("TrainerId"));
        returnTrainer.FirstName = reader.GetString(reader.GetOrdinal("FirstName"));
        returnTrainer.LastName = reader.GetString(reader.GetOrdinal("LastName"));
        returnTrainer.PhoneNumber = reader.GetString(reader.GetOrdinal("PhoneNumber"));
        returnTrainer.Address = reader.GetString(reader.GetOrdinal("Address"));
        returnTrainer.City = reader.GetString(reader.GetOrdinal("City"));
        returnTrainer.PostalCode = reader.GetString(reader.GetOrdinal("PostalCode"));
        returnTrainer.EmailAddress = reader.GetString(reader.GetOrdinal("EmailAddress"));
    }

    return returnTrainer;
}

更新: Web サイトで Trainer オブジェクトを ProFitWebService.Trainer に変更すると、問題が修正されました。

    ProFitWebService.Service serviceConn = new ProFitWebService.Service();
    ProFitWebService.Trainer authenticatedTrainer = (ProFitWebService.Trainer)serviceConn.GetAuthenticatedTrainer(_TrainerLogin.UserName);

これに対する答えは、単純に、Web サービスから返されるライブラリ オブジェクトは常にサービスの型ベース/プレフィックスであるということだと思います。また、Web サイトとサービスの両方からクラス Library を参照するべきではありません。常に WebService を作成する必要があります。オブジェクトのバージョン - ProFitWebService.Trainer など

Web サービス内でライブラリを使用している場合、誰かがこれを標準的な方法として確認できますか? または私がこれをもっと難しくしているなら、それは本当にです!

4

4 に答える 4

1

この種のことは、リフレクションを使用する場合、実際のアセンブリが異なる場合(バージョン、コンパイル時、またはアセンブリの異なるコピーを使用する場合)に発生する可能性があります。コードがリフレクションを使用しているかどうかはわかりませんが...

于 2009-04-26T20:21:44.820 に答える
1

私がやったことは、各クラスの拡張メソッドを作成して、それらを正しい署名に変換することです。6 つの Web サービス間で共有される 20 のビジネス クラスがある場合、あまり楽しくありません :'(

于 2010-01-20T16:06:27.740 に答える