Я почти закончил со службой WCF, которая позволяет мне «удаленно» обращаться к базе данных. Одним из пунктов нашего контракта является возможность удаленного HTTP-запроса.
Вот интерфейс:
[Operation_Contract()]
bool DoWebRequest( string url, out HttpWebResponse resp );
with the implementation (more or less -- no error reporting here):
public bool DoWebRequest( string url, out HttpResponse resp )
{
bool done = false;
resp = null;
WebRequest req = WebRequest.Create( url );
resp.Credentials = CredentialCache.DefaultCredentials;
resp = (HttpWebResponse )req.GetResponse();
done = ( resp != null ? true : false );
return done;
}
Затем я обертываю это в WCFServiceLibrary, размещаю в консольном приложении, создаю ссылку на службу в другом приложении с клиентом. Затем я оборачиваю клиента в другой класс и вызываю его через client.DoWebRequest (url, out resp);
И все мои вещи для доступа к данным работают. Однако, когда я пытаюсь использовать его в тестовом приложении, я получаю следующее:
Соединение с сокетом было прервано. Это может быть вызвано ошибкой обработки вашего сообщения или превышением тайм-аута приема удаленным хостом, или проблемой основного сетевого ресурса. Тайм-аут локального сокета был '00: 00: 59.7180000 '.
Я предполагаю, что это исключение связано с тем фактом, что я неправильно сериализовал объект HttpWebResponse в моем определении интерфейса. Хотя я могу ошибаться. Буду признателен за помощь в том, как заставить это работать.
В качестве примечания, когда я создаю ссылку на сервис, она переключает мои параметры. Клиентский файл Reference.cs показывает метод следующим образом:
public bool DoWebRequest( out HttpWebResponse resp, string url )
{
return base.Channel.DoWebRequest( out resp, url );
}
Есть идеи, почему? Это единственный метод с переключаемыми параметрами. Может ли это быть частью проблемы? Я не могу понять, почему инструмент сделал бы это.
Еще раз спасибо.