2012-07-16 5 views
1

Я написал очень простой 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 (даже если это не по вышеуказанному методу), которые будут очень признательны. Спасибо.

+0

Поскольку вы возвращаете поток, то 'ResponseFormat = WebMessageFormat.Xml' не является правильным. Попробуйте удалить формат ответа. –

+0

'WebOperationContext' - это вспомогательный класс из пространства имен System.ServiceModel.Web. Помимо этого, я не вижу никаких проблем с вашим кодом: я только что реализовал подобный подход, и он работал по назначению – Zruty

ответ

0

Если вы хотите использовать только GET и POST, в следующей статье могут быть полезны:

CodeProject on developing RESTful WCF services (это так, что я лично принимал)

Вы могли бы использовать WebHttpBinding, как описано здесь, обеспечивая PUT и DELETE также:

WCF REST Service with JSON

еще более простой пример он повторно (также с помощью WebHttpBinding)

MS Social on streaming WCF REST

Смежные вопросы