我创建了一个 WCF 服务来流式传输文件(下载)。服务代码如下
public Stream GetCoverScan(List<string> productIDs)
{
FileStream stream = new FileStream("", FileMode.Open, FileAccess.Read);
return stream;
}
Run Code Online (Sandbox Code Playgroud)
有人可以告诉我如何在客户端使用它。我已经在客户端上创建了一个代理,我可以通过创建服务对象来查看该方法,但是我如何读取流。
请指教
配置
<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>
Run Code Online (Sandbox Code Playgroud)
合同
[ServiceContract]
public interface IService1
{
[OperationContract]
string GetData(string name);
[OperationContract]
System.IO.Stream GetCoverScan(List<string> productIDs);
}
Run Code Online (Sandbox Code Playgroud)
绑定
</bindings>
Run Code Online (Sandbox Code Playgroud)
您需要在您使用的绑定上配置流。流媒体的支持BasicHttpBinding,NetTcpBinding和NetNamedPipeBinding。所以如果你有一个BasicHttpBinding,你的配置应该是这样的:
<basicHttpBinding>
<binding name="HttpStreaming" maxReceivedMessageSize="67108864"
transferMode="StreamedResponse"/>
</basicHttpBinding>
Run Code Online (Sandbox Code Playgroud)
我StreamedResponse在这里使用是因为您只有一个应该是流的响应,而不是请求。
您如何阅读流本身取决于其中的内容。假设您通过流发送文本文件,您可以使用StreamReader:
var reader = new StreamReader(service.GetCoverScan(...));
string contents = reader.ReadToEnd();
Run Code Online (Sandbox Code Playgroud)
如果您发送一个 xml 文件,您可以通过XDocument以下方式阅读它:
var doc = XDocument.Load(service.GetCoverScan(...));
Run Code Online (Sandbox Code Playgroud)
因此,这实际上取决于您通过网络发送的内容。
| 归档时间: |
|
| 查看次数: |
8748 次 |
| 最近记录: |