【问题标题】:WCF - The underlying connection was closed: An unexpected error occurred on a receiveWCF - 基础连接已关闭:接收时发生意外错误
【发布时间】: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


【解决方案1】:

您的连接在 using 语句中。您不必显式调用 connection.Close() 。 http://msdn.microsoft.com/en-us/library/haa3afyz%28v=vs.110%29.aspx

【讨论】:

  • 这只是一个小小的改进,但肯定不会解决 OP 的实际问题。
  • 我的用户类包含一个日期时间对象。如果我没有在该对象中传递值,则会收到此意外关闭错误。
  • 是的,这只是一个微小的改进,但想保留该声明,因为它可能会在以后帮助某人
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-06-16
  • 1970-01-01
  • 2022-01-17
  • 1970-01-01
相关资源
最近更新 更多