c# – WCF服务是否支持缓冲和流传输模式?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了c# – WCF服务是否支持缓冲和流传输模式?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2521字,纯文字阅读大概需要4分钟。
内容图文
请注意,这个问题是我尚未解决的当前问题的背景:
Need help resolving an error when WCF service returns DataTable: OutOfMemoryException
我有一个现有的WCF服务,其端点配置为TransferMode.Buffered和一个客户端应用程序,其连接要求相同.
OperationContracts是已建立的方法,除非是非常小的方式,否则我无法轻易修改.例如,我们有一个方法接受SQL查询String并返回从SQL执行派生的DataTable.
使用此方法时,我们遇到了非常大的表的问题.大意义内存占用.
我正在考虑实现TransferMode.Streamed(或类似的),但我似乎无法处理如何只为某些方法做到这一点.
我的WCF服务启动,创建一个唯一的端点,该端点是缓冲的.所以这使我们想要假设它是全有或全无.如果我改为Streaming,那么我将不得不对我所有的OperationContract方法进行批量返工.
有一些SO问题与这个主题调情,但不是直接,而不是任何答案,真正让我到达我需要去的地方.
我错过了什么,还是可以让它起作用?
我需要修复的方法:(如果你想了解连接,请参考引用的问题……这是很多代码)
WCF服务代码:
[OperationContract]
DataTable readDataTable(out DbError dbError, String queryString, Boolean SchemaOnly);
public DataTable readDataTable(out DbError dbError, String queryString, Boolean SchemaOnly)
{
DataTable dt = new DataTable("ReturnTable");
dbError = new DbError();
if (!String.IsNullOrEmpty(queryString))
{
try
{
command.CommandText = queryString.Replace(new String[] { "{{", "}}", ";;" }, new String[] { "{", "}", ";" });
SqlDataReader reader = command.ExecuteReader(SchemaOnly ? CommandBehavior.SchemaOnly : CommandBehavior.Default);
dt.Load(reader);
reader.Close();
}
catch (Exception ex)
{
dbError.HasError = true;
dbError.Error = ex.Message + "\n\n" + queryString;
}
}
return dt;
}
使用它的客户端代码:
public DataTable readDataTable(String queryString, Boolean SchemaOnly)
{
DbError dbError;
DataTable dt = svcCon.readDataTable(out dbError, queryString, SchemaOnly);
if (dbError.HasError)
{
if (_showErrors)
ErrorHandler.Show(dbError.Error);
}
return dt;
}
解决方法:
这是一个很大的问题.我理解这个问题.简短的回答是,您不能在同一个端点操作合同中同时拥有流式传输和缓冲.当然,您可以从同一个Web服务运行1个多个单独的端点,每个端点都有不同的端口,例如,一些使用缓冲,一些使用流.
并且,您可以将主机设置为流式传输其响应,而客户端(使用相同的端点)可以将其上载请求缓冲到主机(反之亦然);那不是问题.但是,无法从同一主机端点缓冲和传输响应.
我们遇到了从SQL缓冲到客户端的下载问题.有一段时间我们去流媒体下载,主要是为了解决客户端设备超时问题,但发现流式传输也是内存密集型的.我们发现,流媒体作为一种技术也很难处理.因此,我们已经远离流式传输并返回缓冲,但我们使用了一种用于下载的交互式“分块”方法> 100MB.例如,当需要传送1 GB的包时,主机将以100mb的块发送文件,客户端软件将其组装为单个文件.
我希望这可以帮到你.
内容总结
以上是互联网集市为您收集整理的c# – WCF服务是否支持缓冲和流传输模式?全部内容,希望文章能够帮你解决c# – WCF服务是否支持缓冲和流传输模式?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。