WebサービスとWebサイト(どちらもC#)を同じソリューションに用意しています。私はまた、ソリューションにクラスライブラリを持っています。 WebサービスとWebサイトの両方がこのクラスライブラリを参照します。C#WebサービスとWebサイト共有ライブラリ、サービスはライブラリオブジェクトの異なる "タイプ"を返す
Webサービスには、ライブラリからオブジェクトを作成して返すWebMethodがあります。
「ProFitLibrary.Trainerに型ProFitWebService.Trainerを変換できません」:ウェブサイトは、これを起動し、次のことが起こるしかし
ProFitWebService.Service serviceConn = new ProFitWebService.Service();
ProFitLibrary.Trainer authenticatedTrainer = (ProFitLibrary.Trainer)serviceConn.GetAuthenticatedTrainer(_TrainerLogin.UserName);
(同じライブラリーから、もう一度)トレーナーオブジェクトにそれを置くことを試みますここではWebMethod属性は次のとおりです。
[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サイト上のProFitWebService.Trainerにトレーナーのオブジェクトを変更するには、問題を修正:
ProFitWebService.Service serviceConn = new ProFitWebService.Service();
ProFitWebService.Trainer authenticatedTrainer = (ProFitWebService.Trainer)serviceConn.GetAuthenticatedTrainer(_TrainerLogin.UserName);
私は、Webサービスから返されたライブラリオブジェクトは、常にサービスに型付き/接頭辞が付けられているということです - 私はWebサイトとサービスの両方からクラスライブラリを参照すべきではありません。 WebServiceバージョンのオブジェクト(ProFitWebService.Trainerなど)を常に作成する必要があります。
Webサービス内でライブラリを使用しているときにこれを標準的な方法として確認できますか?またはこれをもっと難しくしているのなら、それは本当にです!