从WCT Restful服务中使用FileStream

我创建了一个WCF Restful服务,其代码如下:

接口:

[ServiceContract] public interface ISIGService { [OperationContract] [WebInvoke(Method = "GET", ResponseFormat = WebMessageFormat.Xml, BodyStyle = WebMessageBodyStyle.Bare, UriTemplate = "GetMultimedia/{id}")] Stream GetMultimedia(string id); } 

实现此服务的代码

 public Stream GetMultimedia(string id) { string filePath = MultimediaBLL.GetFilePath(int.Parse(id)); if (string.IsNullOrEmpty(filePath)) return null; try { FileStream multimediaFileStream = File.OpenRead(filePath); return multimediaFileStream; } catch (Exception ex) { Console.WriteLine("Not able to get multimedia stream:{0}", ex.Message); throw ex; } } 

我需要使用这个获取多媒体文件(图像,音频或video)文件流的服务到目前为止我有这个:

 RestClient client = new RestClient(urlService); RestRequest request = new RestRequest { Method = Method.GET, RequestFormat = DataFormat.Xml, Resource = "GetMultimedia/{id}" }; request.AddParameter("id", idMultimedia, ParameterType.UrlSegment); var response = client.Execute(request); if (!response.StatusCode != HttpStatusCode.OK) return; ??? 

我不知道如何获取流并处理它以在处理程序中显示它,如下所示:

 context.Response.ClearContent(); context.Response.ClearHeaders(); context.Response.AddHeader("Content-Length", bytes.Length.ToString()); context.Response.BinaryWrite(bytes); context.Response.End(); 

我想我必须得到文件字节将其发送给处理程序。

我不知道这是你要做的事情。

服务

 public Stream GetMultimedia(string id) { string filePath = MultimediaBLL.GetFilePath(int.Parse(id)); if (string.IsNullOrEmpty(filePath)) return null; try { FileStream multimediaFileStream = File.OpenRead(filePath); WebOperationContext.Current.OutgoingResponse.ContentType = "Your/contentType"; WebOperationContext.Current.OutgoingResponse.Headers["Content-Disposition"] = "attachment; filename=Your_file_name.png"; return multimediaFileStream; } catch (Exception ex) { Console.WriteLine("Not able to get multimedia stream:{0}", ex.Message); throw ex; } } 

客户

 RestClient client = new RestClient(urlService); RestRequest request = new RestRequest { Method = Method.GET, RequestFormat = DataFormat.Xml, Resource = "GetMultimedia/{id}" }; request.AddParameter("id", idMultimedia, ParameterType.UrlSegment); context.Response.Clear(); content.Response.ClearHeaders(); # write original responseStream to the context.Response.OutputStream request.ResponseWriter = (responseStream) => responseStream.WriteTo(context.Response.OutputStream); var response = client.DownloadData(request); # maybe you need to add content type and file name as well context.Response.AddHeader("Content-Type", "fetch from response"); context.Response.AddHeader("Content-Disposition", "fetch from response"); context.Response.Flush(); context.Response.Close(); context.Response.End(); if (!response.StatusCode != HttpStatusCode.OK) # do something