我正在使用WCF进行Streaming,我有一个关于“ Enabling Asynchronous Streaming”中的段落对WCF中大数据和流媒体的MSDN文章的含义的疑问.

To enable asynchronous streaming,add the
dispatcherSynchronizationBehavior endpoint behavior to the service
host and set its AsynchronousSendEnabled property to true. We have
also added the capability of true asynchronous streaming on the send
side. This improves scalability of the service in scenarios where it
is streaming messages to multiple clients some of which are slow in
reading possibly due to network congestion or are not reading at all.
In these scenarios we Now do not block individual threads on the
service per client. This ensures that the service is able to process
many more clients thereby improving the scalability of the service.

我明白上面的意思是我补充说

<behaviors>
  <endpointBehaviors>
    <behavior name="AsyncStreaming">
      <dispatcherSynchronization asynchronousSendEnabled="true" />
    </behavior>
  </endpointBehaviors>
  ...

到我的web.config文件并引用我的端点中的AsyncStreaming行为,但我不明白这些步骤为我完成了什么.我是否需要修改我的代码才能利用这种异步性?

同样在类似主题上(但是如果它太不同我会将它移到一个新问题),在WCF中如何使用Streams使用async / await效果?我可以执行任务< Stream> Foo()在我的服务合同中?我做了一些数据库调用,其结果我最终将包装到我将从WCF服务返回的自定义流中.能够使用像ExecuteDataReaderAsync()这样的东西非常有用,在处理流式消息而不是缓冲消息时,我仍然可以使用它吗?

我已经测试了它,我知道它“工作”使用任务但我不知道是否这样做会导致函数回退到“缓冲”模式,就像你为函数提供多个参数一样(参见第3段) “Programming Model for Streamed Transfers”在同一个MSDN页面上),我不知道如何检查是否发生了这种情况.

解决方法

我通过.NET Reference Source将其追溯到 RequestContext.显然,ChannelHandler.sendAsynchronously字段控制是否异步(通过RequestContext.BeginReply / EndReply APM方法)或通过RequestContext.Reply同步完成消息回复.

据我所知,所有这一切都释放了一个服务器端线程,该线程返回到池中,否则将在RequestContext.Reply中忙于将流“抽”到客户端,只要流对象在服务器上是活着的.

这似乎是完全透明的,所以我认为您可以安全地使用基于异步TAP的合同方法并返回Task< Stream>.例如,在另一个合同方法中,您可以等待Stream.WriteAsync.

当你到达那里时,请分享你的实际经验作为你自己的答案,我对细节非常感兴趣:)

c# – WCF中的异步流的更多相关文章

  1. 从Android应用程序中消耗WCF Web服务?

    我想从Android应用程序中使用WCFWeb服务.我曾经使用过.asmxweb服务,但我不知道如何在Android应用程序中使用SCFWeb服务.我用谷歌搜索它但没有找到任何东西.如果有人做过,请帮助我.提前致谢.解决方法Hereisanarticleexplaininghowtoconsumewebservicewithandroidingeneral当涉及到WCF并且可以与您想要小心的jav

  2. 具有证书的WCF客户端身份验证

    同一服务正在使用.pfx证书进行身份验证。客户端不愿意共享.pfx文件,并坚持要求我实现一种使用.cer证书的方法。我已尝试安装证书并将其导出为.pfx格式,但由于.cer文件没有私钥,因此禁用了以.pfx导出的选项。

  3. wcf – ClientCredentialType = Windows和= Ntlm之间的差异

    FeedbackID=354236这种情况听起来类似于clientCredentialType=Windows在域帐户下运行时失败,并且在本地帐户下运行时工作).问题是建议的修复程序需要更改WCF客户端配置文件–但在我的情况下,我使用SOAP1.1与非WCF客户端.clientCredentialType=Windows使用内置的Windows身份验证,可以通过ActiveDirectory和NTLM.显然,NTLM类型将仅使用NTLM进行身份验证.我相信你已经看过了,但这里是WCF安全性的链接:http

  4. 如何在1个Windows服务中托管2个WCF服务?

    我有一个WCF应用程序,它有两个服务,我试图使用net.tcp在一个Windows服务中托管.我可以运行任何一种服务,但只要我尝试将它们都放在Windows服务中,只有第一个服务加载.我已经确定第二个服务ctor正在被调用,但OnStart永远不会被激活.这告诉我WCF发现加载第二个服务有问题.使用net.tcp我知道我需要打开端口共享并启动服务器上的端口共享服务.这一切似乎都运作正常.我已经尝试

  5. windows-services – Msmq和WCF服务

    我是否遗漏了为队列和Windows服务设置的任何权限,如果是这样,你能否建议在哪里添加这些权限?汤姆·霍兰德有一个关于使用WCF的MSMQ的三部分博客系列–非常值得一试!

  6. 在带有WCF的App.config中使用Windows角色身份验证

    谢谢如果我理解得很好,你想在运行时选择角色.这可以通过WCF操作中的permission需求来完成.例如.

  7. wcf – 什么是任务管理器中的CPU时间?

    我有一些WCF服务托管在Windows服务中.昨天我看了任务管理器,注意到我的Windows服务进程的cpu时间是5个小时以上,而大多数其他进程都是0.这意味着什么?

  8. .net – 在IIS 7.5中托管WCF与Windows服务的性能注意事项

    我有一个简单直接的问题:是否有任何性能优势,我不知道什么时候比较主机的IIS7.5中的WCF服务与Windows服务?

  9. wcf – 为我配置“使用端点配置服务”演示失败(Microsoft / endpoint.tv / Pluralsight)

    HTTP无法注册URLhttp://:8732/EvalService/….:P我试过评论新的终点无济于事.即使是原始的也会因此错误而失败.如果我把它们放回原来的端口[不是那么]1337也没关系.这是App.config,并没有什么突出的问题:有什么问题/我该如何解决?

  10. 需要一步一步的WCF作为Windows服务

    我正在尝试找到一个(好的)分步创建WCF并将其作为Windows服务托管的示例.我正在使用VS2010并且有一个带有1个函数的简单WCF.请不要谷歌和发布;我正在寻找某人实际使用过的资源.我所做的大部分Google搜索都没有达到我想要做的事情.我只想获取我的WCF库,并找到一种方法将其安装为WindowService.我在2008年完成了,但2010年是……

随机推荐

  1. c# – (wpf)Application.Current.Resources vs FindResource

    所以,我正在使用C#中的WPF创建一个GUI.它看起来像这样:它现在还没有完成.这两行是我尝试制作一种数据表,它们在XAML中是硬编码的.现在,我正在C#中实现添加新的水果按钮功能.我在XAML中有以下样式来控制行的背景图像应该是什么样子:因此,在代码中,我为每列col0,col1和col2创建一个图像,如果我使用以下代码,它添加了一个如下所示的新行:如你所见,它不太正确……为什么一个似乎忽略了一些属性而另一个没有?

  2. c# – 绑定DataGridTemplateColumn

    似乎我已经打了个墙,试图在DataGrid上使用DataTemplates.我想要做的是使用一个模板来显示每个单元格的两行文本.但是似乎无法以任何方式绑定列.以下代码希望显示我想做的事情.注意每个列的绑定:模板列没有这样的东西,因此,这个xaml不可能工作.我注定要将整个DataTemplate复制到每个列,只是对每个副本都有不同的约束?解决方法我不完全确定你想要做什么,但如果您需要获取整行的DataContext,可以使用RelativeSource绑定来移动视觉树.像这样:

  3. c# – 学习设计模式的资源

    最近我来到了这个设计模式的概念,并对此感到非常热情.你能建议一些帮助我深入设计模式的资源吗?

  4. c# – 是否有支持嵌入HTML页面的跨操作系统GUI框架?

    我想开发一个桌面应用程序来使用跨系统,是否有一个GUI框架,允许我为所有3个平台编写一次代码,并具有完全可脚本化的嵌入式Web组件?我需要它有一个API来在应用程序和网页之间进行交流.我知道C#,JavaScript和一些python.解决方法Qt有这样的事情QWebView.

  5. c# – 通过字符串在对象图中查找属性

    我试图使用任意字符串访问嵌套类结构的各个部分.给出以下(设计的)类:我想要从Person对象的一个实例的“PersonsAddress.HousePhone.Number”获取对象.目前我正在使用反思来做一些简单的递归查找,但是我希望有一些忍者有更好的想法.作为参考,这里是我开发的(crappy)方法:解决方法您可以简单地使用标准的.NETDataBinder.EvalMethod,像这样:

  6. c# – 文件下载后更新页面

    FamilyID=0a391abd-25c1-4fc0-919f-b21f31ab88b7&displaylang=en&pf=true它呈现该页面,然后使用以下元刷新标签来实际向用户提供要下载的文件:你可能需要在你的应用程序中做类似的事情.但是,如果您真的有兴趣在文件完全下载后执行某些操作,那么您的运气不佳,因为没有任何事件可以与浏览器进行通信.执行此操作的唯一方法是上传附件时使用的AJAXupload.

  7. c# – 如何在每个机器应用程序中实现单个实例?

    我必须限制我的.net4WPF应用程序,以便每台机器只能运行一次.请注意,我说每个机器,而不是每个会话.我使用一个简单的互斥体实现单实例应用程序,直到现在,但不幸的是,这样一个互斥是每个会话.有没有办法创建机器互连,还是有其他解决方案来实现每个机器应用程序的单个实例?

  8. c# – WCF和多个主机头

    我的雇主网站有多个主机名,都是同一个服务器,我们只是显示不同的皮肤来进行品牌宣传.不幸的是,在这种情况下,WCF似乎不能很好地工作.我试过overridingthedefaulthostwithacustomhostfactory.这不是一个可以接受的解决方案,因为它需要从所有主机工作,而不仅仅是1.我也看过thisblogpost,但是我无法让它工作,或者不是为了解决我的问题.我得到的错误是“这

  9. c# – ASP.NET MVC模型绑定与表单元素名称中的虚线

    我一直在搜索互联网,试图找到一种方式来容纳我的表单元素的破折号到ASP.NET的控制器在MVC2,3或甚至4中的默认模型绑定行为.作为一名前端开发人员,我更喜欢在我的CSS中使用camelCase或下划线进行破折号.在我的标记中,我想要做的是这样的:在控制器中,我会传入一个C#对象,看起来像这样:有没有办法通过一些正则表达式或其他行为来扩展Controller类来适应这种情况?我讨厌这样的事实,我必须这样做:甚至这个:思考?

  10. c# – 用户界面设计工具

    我正在寻找一个用户界面设计工具来显示文档中可能的GUI.我不能生成代码.我知道MicrosoftVisio提供了一个功能.但有什么办法吗?您使用哪种软件可视化GUI?

返回
顶部