2015-01-11 4 views
0

Я разрабатываю службу WCF. У меня есть метод, возвращающий один объект после запроса из базы данных.WCF - Основное соединение было закрыто: произошла непредвиденная ошибка при получении

В настоящее время я столкнулся с проблемой. Если пользовательский объект заполнен данными, веб-служба возвращает правильный ответ json. Но если пользовательский объект не инициализирован данными из базы данных (данных для конкретного идентификатора нет). Я получаю следующую ошибку.

"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); 

Я не могу выяснить причину. Трассировка стека не работает.

Любая помощь?

+0

Поскольку проблема возникает только в случае отсутствия данных, вам нужно показать нам свой метод 'FillUserObject (reader). Вы уже пытались отладить ваш сервис? – Filburt

+0

Мой класс пользователя содержит один объект datetime. Если я не передаю значение в этом объекте, я получаю эту неожиданную ошибку закрытия. –

+0

Итак, вы, вероятно, могли бы решить эту проблему с помощью NULL DateTime? – Filburt

ответ

0

Ваше сообщение находится внутри с использованием оператора. Вам не нужно вызывать connection.Close() явно. http://msdn.microsoft.com/en-us/library/haa3afyz%28v=vs.110%29.aspx

+1

Это лишь незначительное улучшение, но, безусловно, не будет исправлять актуальную проблему OPs. – Filburt

+0

Мой класс пользователя содержит один объект datetime. Если я не передаю значение в этом объекте, я получаю эту неожиданную ошибку закрытия. –

+0

Yeap, что только незначительное улучшение, но хотел оставить это заявление, потому что он может помочь кому-то позже – Mino

Смежные вопросы

 Смежные вопросы