2012-07-16 150 views
1

我在C#寫了一個非常基本的WCF REST服務,已在服務界面以下流的字符串:如何從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); 
    } 

不幸的是,這個功能似乎沒有任何理由,我可以辨別正常工作。當我通過瀏覽器訪問本地主機時調用該函數:XXXXX/Service.svc/stream它顯示一個加載圖標,然後簡單地凍結。

我已經能夠找到一些網站,試圖回答這個問題,但他們的代碼實際上沒有任何作品。在那裏我發現上面的代碼的地方有一行不工作:

WebOperationContext.Current.OutgoingResponse.ContentType = "text/plain"; 

這條線被強調,因爲該程序無法找到WebOperationContext參考,我不知道它會被定位,儘管有從僅包含兩個C#文件的站點下載源代碼,但不能實際運行。

如果任何人都可以告訴我如何通過WCF中的REST服務流數據(即使它不是通過上述方法),將不勝感激。謝謝。

+0

既然你正在返回的流時,'ResponseFormat = WebMessageFormat.Xml'是不對的。嘗試刪除響應格式。 – 2012-07-16 20:22:58

+0

'WebOperationContext'是'System.ServiceModel.Web'命名空間的一個輔助類。除此之外,我可以看到你的代碼沒有問題:我剛剛實現了類似的方法,並且按照預期工作 – Zruty 2012-07-18 08:05:50

回答