【发布时间】:2015-01-11 08:09:54
【问题描述】:
我正在开发 WCF 服务。我有一种从数据库查询后返回一个对象的方法。
目前我面临一个问题,如果用户对象填充了数据,Web 服务会返回正确的 json 响应。但是,如果用户对象没有使用数据库中的数据进行初始化(特定 ID 的数据不存在)。我收到以下错误。
"The underlying connection was closed: An unexpected error occurred on a receive."
现有代码:
public static User GetUserById(int userId, string dbConnection)
{
var userClass = new User();
using (var connection = new SqlConnection(dbConnection))
{
connection.Open();
var sqlCommand = new SqlCommand("GetUserById", connection);
sqlCommand.Parameters.Add(new SqlParameter("@UserId", SqlDbType.Int));
sqlCommand.Parameters["@UserId"].Value = userId;
sqlCommand.CommandType = CommandType.StoredProcedure;
var reader = sqlCommand.ExecuteReader();
while (reader.Read())
{
userClass = FillUserObject(reader);
}
connection.Close();
reader.Close();
}
return userClass;
}
[OperationContract]
[WebGet(UriTemplate = "GetUserById?userId={userId}", ResponseFormat = WebMessageFormat.Json, RequestFormat = WebMessageFormat.Json)]
User GetUserById(int userId);
我无法找出原因。堆栈跟踪也无法正常工作。
有什么帮助吗?
【问题讨论】:
-
由于只有在没有数据存在时才会出现问题,因此您需要向我们展示您的
FillUserObject(reader)方法。您是否已经尝试调试您的服务? -
我的用户类包含一个日期时间对象。如果我没有在该对象中传递值,则会收到此意外关闭错误。
-
所以您可能可以使用可为空的 DateTime 来解决这个问题?
-
转换为可为空的日期时间有效。谢谢:)
-
堆栈跟踪不会告诉你足够的信息,因为 WCF 将它包装了很多次。请启用 WCF 跟踪并查看跟踪是否显示详细信息,msdn.microsoft.com/en-us/library/ms732023(v=vs.110).aspx
标签: asp.net web-services wcf