Оберните MemoryStream в блок использования REST WCF - PullRequest
2 голосов
/ 17 июня 2010

Я изучаю REST для реализации некоторых Сервисов с WCF.Я реализовал пример с MemoryStream.Поскольку MemoryStream Одноразовый, я обернул его в использование.Когда я делаю это, я иногда вижу ответ xml в браузере (IE8), а иногда он просто показывает следующее сообщение об ошибке:

Загрузка указанного ресурса не удалась.Ошибка обработки ресурса 'http://localhost:8889/SimpleGetService/'.

Почему это происходит?Когда я не заключаю это в использование, я, кажется, никогда не получаю ошибку.

Ответы [ 5 ]

3 голосов
/ 17 июня 2010

Вы можете установить OperationBehaviorAttribute.AutoDisposeParameters в true .Это решит вашу проблему и удалит все возвращенные объекты.

Редактировать: Кстати: по умолчанию установлено значение true .Так что вам вообще не нужно об этом беспокоиться:)

1 голос
/ 17 июня 2010

Когда вы возвращаете Stream из службы WCF REST, не утилизируйте его (поскольку он будет удален до того, как вызывающий объект когда-либо с ним что-то сделает), просто позвольте инфраструктуре утилизировать его для вас.

0 голосов
/ 17 июня 2010

Мне кажется, что, поскольку MemoryStream реализует IDisposable, вы должны утилизировать его. Конечно, это ничего не делает СЕГОДНЯ, но это, конечно, может быть в субботу!

Вы не хотите, чтобы ваш код знал мельчайшие детали выполнения вызова REST, поэтому, возможно, вам следует извлечь то, что вам нужно, из MemoryStream до конца использования блока и вернуть его вызывающей стороне. В любом случае это более слабо связано - возвращение MemoryStream вызывающей стороне раскрывает слишком много деталей реализации IMHO.

0 голосов
/ 17 июня 2010

На самом деле абсолютно нет необходимости утилизировать MemoryStream, поскольку он использует только управляемые ресурсы. Он наследуется от Stream, поэтому автоматически получает интерфейс IDisposable, но это не обязательно.

0 голосов
/ 17 июня 2010

Звучит так, как будто его удаляют до того, как вы отправите его обратно в ответ. Попробуйте извлечь байты из него как байтовый массив, прежде чем утилизировать его и вернуть байты.

...