Мой сервисный интерфейс:
[ServiceContract]
public interface IMyService
{
[OperationContract]
[WebInvoke(Method = "GET", ResponseFormat = WebMessageFormat.Json, BodyStyle = WebMessageBodyStyle.Bare, UriTemplate = "HelloJSON/{name}")]
string HelloJSON(string name);
[OperationContract]
[WebInvoke(Method = "GET", ResponseFormat = WebMessageFormat.Json, BodyStyle = WebMessageBodyStyle.Bare, UriTemplate = "GetEmployees")]
List<Employee> GetEmployees();
}
Моя реализация:
public class MyService : IMyService
{
public string HelloJSON(string name)
{
return string.Format("Hello {0} in JSON", name);
}
public List<Employee> GetEmployees()
{
using (DBEntities ctx = new DBEntities())
{
List<Employee> emp = new List<Employee>();
emp = (from e in ctx.Employee select e).ToList();
return emp;
}
}
}
Когда я вызываю первый метод, я получаю что-то вроде «Hello pepe in JSON», это нормально.
Когда я вызываю второй метод и устанавливаю точку останова в строке «return emp;» Я получаю список сотрудников (в базе данных 6 записей), но в IE я получаю это:
Internet Explorer не может отобразить веб-страницу
и тестирование в Firefox все, что я получаю, это пустая страница с пустым телом, без HTML, без данных и без ошибок.
Я думаю, что WCF не может сериализовать мои объекты EF4 по умолчанию.
EDIT:
Мое окончательное решение было что-то (не совсем), как это:
static string SerializeJSON<T>(T obj) {
JavaScriptSerializer serializer = new JavaScriptSerializer();
return serializer.Serialize(obj); }