流而不是字节[]

时间:2013-06-26 19:15:08

标签: c# wcf basichttpbinding

我正在构建简单的WCF以将文件流式传输到Android(使用Xamarin.Android)。为此,我将服务配置为BasicHttpBinding,并使用TransferMode=Streamed。为了便于测试,我在使用简单的WPF应用程序测试服务之前,我将其部署到Android。

我遇到的第一个问题是: - 如果我将服务作为服务参考包含在WPF中,我仍然需要在客户端配置客户端绑定。但在服务器端也有客户端配置。那么,为什么他没有从服务器给我带来配置? 这是服务器的WebConfig:

<client>
  <endpoint binding="basicHttpBinding" bindingConfiguration="BindingStreamed"
    contract="Web_Explorer.IWeb_Explorer" name="" kind="" endpointConfiguration="" />
</client>

<bindings>
  <basicHttpBinding>
    <binding name="BindingStreamed" maxBufferSize="67108864" maxReceivedMessageSize="67108864"
      transferMode="Streamed" messageEncoding="Text" />
  </basicHttpBinding>
</bindings>

<services>
  <service name="Web_Explorer.WExplorer">
    <endpoint address="Explorer" binding="basicHttpBinding" bindingConfiguration="BindingStreamed"
      name="basicHttp" contract="Web_Explorer.IWeb_Explorer" />
  </service>
</services>

我通过配置客户端来解决这个问题。一切还好。

之后我将我的WPF应用程序中的服务添加为Web Service(Xamarin.Android中唯一可用的选项)。现在的问题是: - 我的一个类返回Stream类型。在我更改为WebReference之后,返回不再是Stream,而是byte[](在客户端)。我读过这个有用,但我的问题是,为什么他改变了返回类型?从我所做的研究中,如果我使用byte[]作为回报,我必须等待上传完成才能使用它,对吧? 代码:

[ServiceContract()]
public interface IWeb_Explorer
{
    [OperationContract]
    Stream LeArquivo();
}



public Stream LeArquivo()
    {
        Expl.sr = new StreamReader(@"C:\Viagens3.xml").BaseStream;
        return Expl.sr;
    }

我可能在这里写了很多毫无意义的事情。但我只是无法学习WCF。这件事没有进入我的脑海。

0 个答案:

没有答案