如何从 WCF 服务读取流

Ami*_*mit 0 wcf

我创建了一个 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)

Ron*_*erg 5

您需要在您使用的绑定上配置流。流媒体的支持BasicHttpBindingNetTcpBindingNetNamedPipeBinding。所以如果你有一个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)

因此,这实际上取决于您通过网络发送的内容。