我在同一个解决方案中有一个 Web 服务和一个网站(都是 C#)(现在);我在解决方案中也有一个类库。Web 服务和网站都引用这个类库。
Web 服务有一个 WebMethod,它从库中创建一个对象并返回它。该网站调用它并尝试将其放入 Trainer 对象(再次,来自同一个库)
ProFitWebService.Service serviceConn = new ProFitWebService.Service();
ProFitLibrary.Trainer authenticatedTrainer = (ProFitLibrary.Trainer)serviceConn.GetAuthenticatedTrainer(_TrainerLogin.UserName);
但是会发生以下情况:“无法将类型 ProFitWebService.Trainer 转换为 ProFitLibrary.Trainer”
这是网络方法:
[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;
}
更新:在网站上将 Trainer 对象更改为 ProFitWebService.Trainer 解决了问题:
ProFitWebService.Service serviceConn = new ProFitWebService.Service();
ProFitWebService.Trainer authenticatedTrainer = (ProFitWebService.Trainer)serviceConn.GetAuthenticatedTrainer(_TrainerLogin.UserName);
我认为这个问题的答案很简单,从 Web 服务返回的库对象将始终是基于类型/前缀的服务 - 我不应该从网站和服务中引用类库 - 我应该总是创建 WebService对象的版本 - ProFitWebService.Trainer 等。
当您在 Web 服务中使用库时,有人可以确认这是一种标准做法吗?或者,如果我让这变得更加困难,那真的是!