同じソリューションに 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 サービス内でライブラリを使用している場合、誰かがこれを標準的な方法として確認できますか? または私がこれをもっと難しくしているなら、それは本当にです!