Я написал очень простой WCF REST службы в C#, который имеет следующие в интерфейсе сервиса:Как поток строку из службы WCF REST
[OperationContract]
[WebGet(UriTemplate = "/stream", ResponseFormat = WebMessageFormat.Xml)]
Stream streamTest();
В Service.svc.cs файл имеет эта функция (очевидно StreamUtility включена в качестве ссылки и в usings):
public Stream streamTest()
{
return StreamUtility.streamTest();
}
и, наконец, сама функция потоковой выглядит следующим образом: (Он возвращает большую произвольную строку в потоке памяти на основе исходного кода, который я нашел здесь: http://www.codeproject.com/Articles/35982/REST-WCF-and-Streams-Getting-Rid-of-those-Names-Sp)
public static Stream streamTest()
{
string result = "skdjdfnlsakdjfnasdlkjfnasdkjkfnasldkjfnasdlkjfnasdlkfjnasdldkfjnassdlfkjnadsdlfkjasndflkjsanflaskjdfnalskdkjnfalskfjnslidifubsaoicubuiewnfpoiowneflskjdfansdufawneifuenfgiwe";
for (int i = 0; i < 5; i++)
{
result += result;
}
Encoding encoding = Encoding.GetEncoding("ISO-8859-1");
byte[] returnBytes = encoding.GetBytes(result);
return new MemoryStream(returnBytes);
}
К сожалению, эта функция не работает должным образом, без каких-либо причин, которые я мог различить. Когда я вызываю функцию через мой браузер, перейдя на localhost: XXXXX/Service.svc/stream, он показывает значок загрузки, а затем просто зависает.
Я смог найти несколько веб-сайтов, которые пытаются ответить на этот вопрос, но ни один из их кода не работает. Место, где я нашел код выше есть строка, которая не работает:
WebOperationContext.Current.OutgoingResponse.ContentType = "text/plain";
Эта линия получает подчеркнута, так как программа не может найти ссылку WebOperationContext, и я не знаю, где он будет находиться, несмотря на наличие загрузил исходный код с сайта, который включает только два файла C# и не предназначен для фактического запуска.
Если бы кто-нибудь мог сказать мне, как передавать данные через службу REST в WCF (даже если это не по вышеуказанному методу), которые будут очень признательны. Спасибо.
Поскольку вы возвращаете поток, то 'ResponseFormat = WebMessageFormat.Xml' не является правильным. Попробуйте удалить формат ответа. –
'WebOperationContext' - это вспомогательный класс из пространства имен System.ServiceModel.Web. Помимо этого, я не вижу никаких проблем с вашим кодом: я только что реализовал подобный подход, и он работал по назначению – Zruty