我用 C# 编写了一个非常基本的 WCF REST 服务,在服务接口中有以下内容:
[OperationContract]
[WebGet(UriTemplate = "/stream", ResponseFormat = WebMessageFormat.Xml)]
Stream streamTest();
在 Service.svc.cs 文件中,它具有此功能(显然 StreamUtility 作为参考包含在使用中):
public Stream streamTest()
{
return StreamUtility.streamTest();
}
最后流函数本身看起来像这样:(它根据我在这里找到的源代码返回一个大的任意字符串作为内存流:http: //www.codeproject.com/Articles/35982/REST-WCF-and-Streams -Getting-Rid-of-the-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# 文件并且并未实际运行。
如果有人能准确地告诉我如何通过 WCF 中的 REST 服务流式传输数据(即使不是通过上述方法),那将不胜感激。谢谢你。