我创建了一个WCF服务来传输文件(下载)。服务代码如下
public Stream GetCoverScan(List<string> productIDs)
{
FileStream stream = new FileStream("", FileMode.Open, FileAccess.Read);
return stream;
}
有人可以告诉我如何在客户端使用它。我已经在客户端上创建了一个代理,我可以通过创建服务的对象来查看该方法,但是我如何读取该流。
请告知
配置
<system.serviceModel>
<bindings>
<basicHttpBinding>
<binding name="StreamedHttp" transferMode="StreamedResponse"
maxReceivedMessageSize="67108864">
</binding>
</basicHttpBinding>
</bindings>
<services>
<service name="Streaming.Service1"
behaviorConfiguration="Streaming.Service1Behavior">
<endpoint address="" bindingConfiguration="StreamedHttp"
binding="basicHttpBinding" contract="Streaming.IService1">
</endpoint>
</service>
</services>
<behaviors>
<serviceBehaviors>
<behavior name="Streaming.Service1Behavior">
<serviceMetadata httpGetEnabled="true"/>
<serviceDebug includeExceptionDetailInFaults="false"/>
</behavior>
</serviceBehaviors>
</behaviors>
</system.serviceModel>
合同
[ServiceContract]
public interface IService1
{
[OperationContract]
string GetData(string name);
[OperationContract]
System.IO.Stream GetCoverScan(List<string> productIDs);
}
绑定
</bindings>
答案 0 :(得分:4)
您需要configure streaming使用您所使用的绑定。 BasicHttpBinding
,NetTcpBinding
和NetNamedPipeBinding
支持流式传输。因此,如果您有BasicHttpBinding
,您的配置应如下所示:
<basicHttpBinding>
<binding name="HttpStreaming" maxReceivedMessageSize="67108864"
transferMode="StreamedResponse"/>
</basicHttpBinding>
我在这里使用StreamedResponse
,因为您只有一个应该是流的响应,而不是请求。
您如何阅读流本身取决于其中的内容。假设您通过流发送文本文件,则可以使用StreamReader
:
var reader = new StreamReader(service.GetCoverScan(...));
string contents = reader.ReadToEnd();
如果发送xml文件,可以通过XDocument
:
var doc = XDocument.Load(service.GetCoverScan(...));
所以这真的取决于你通过网络发送的内容。
答案 1 :(得分:0)
如果你提到
response.ContentType = "text/xml"
,接收应用程序可以知道流的类型,因此可以调用流的标准方式作为参考。