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