我正在构建简单的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。这件事没有进入我的脑海。