Я играл с WCF вместе с EF и столкнулся с проблемой отправки коллекций.
Я работаю с игровой площадкой, состоящей из 2-х решений, просто необходимый минимум для общения по линии. Отправка строк между ними работает нормально, добавление записи в базу данных через клиента тоже работает нормально. Тем не менее, мой сервис выставляет следующий контракт:
[OperationContract]
IEnumerable<Company> GetAllCompanies();
Реализовано в моем сервисе, как:
public IEnumerable<Company> GetAllCompanies()
{
using (var ctx = new InleerAppContext())
{
return ctx.Company.ToList();
}
}
Ничего необычного, и так как отправка объектов, казалось, работала нормально, я ожидал, что это тоже будет работать.
Однако при вызове GetAllCompanies () из моего клиента:
var result2 = service.GetAllCompanies();
foreach (Company c in result2)
{
Console.WriteLine(c.Name);
}
Возникает исключение CommunicationException:
Произошла ошибка при получении ответа HTTP на
http://localhost:8080/. Это может быть связано с конечной точкой службы
привязка без использования протокола HTTP. Это также может быть связано с HTTP
контекст запроса прерывается сервером (возможно, из-за
сервис выключен). Подробнее смотрите в журналах сервера.
С дополнительной информацией:
в System.Net.HttpWebRequest.GetResponse ()
в System.ServiceModel.Channels.HttpChannelFactory.HttpRequestChannel.HttpChannelRequest.WaitForReply (TimeSpan
Тайм-аут)
Я уже изменил тайм-аут на 30 минут как на клиенте, так и на сервере, используя настраиваемую конфигурацию привязки (которая является базовой для HttpBinding с обеих сторон):
<bindings>
<basicHttpBinding>
<binding name="longTimeoutBasicHttpBinding"
receiveTimeout="00:30:00"
sendTimeout="00:30:00">
</binding>
</basicHttpBinding>
</bindings>
Что мне здесь не хватает?