0

我正在构建简单的 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 服务(Xamarin.Android 中唯一可用的选项)。现在的问题是: - 我的一个类返回一个Stream类型。在我更改为 WebReference 后,返回Stream不再是 a,而是byte[](在客户端)。我读过这行得通,但我的问题是,为什么他改变了返回类型?根据我所做的研究,如果我使用byte[]as return,我必须等待上传完成才能使用它,对吗?代码:

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



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

我可能在这里写了很多无意义的东西。但我就是学不会WCF。这件事没有进入我的脑海。

4

0 回答 0