问题标签 [wcf-streaming]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c# - 使用 WCF 接收大对象
我试图通过 WCF 接收带有 XML 的大对象。如果我设置它不起作用maxStringContentLength={Default value}
。
它仅在我增加时才有效,maxStringContentLength
但会降低性能。
有没有不增加这个问题的解决方案maxStringContentLength
?
wcf-binding - 是否可以在同一服务中混合流传输和非流传输 WCF OperationContracts?
我有一组在单个 ServiceContract 中定义的操作,现在其中两个已切换为直接获取和返回 MessageContracts,其中包含 MSDN 文档中概述的 Stream 主体。我已经对此进行了测试,它似乎工作正常,但是现在当我在同一个 ServiceContract 中调用我的其他操作时,它采用简单的 RPC 样式参数和返回类型,我得到以下异常。
如果我了解发生了什么,我认为问题在于我已将服务器和客户端的 TransferMode 在两个方向上都设置为 Streamed,以促进基于 MessageContract 的操作,但这一定会破坏我之前工作的非基于 MessageContract 的操作我介绍了流媒体。
那么也许我只有这两个选择:
- 在此服务中重新编写我的所有操作合同,以便它们基于 MessageContract,也许还可以为主体公开一个 Stream。在这一点上,我不确定是否需要 Stream,或者我是否可以将其设置为 null 或将其完全从消息中排除。
- 根据传输模式将我的运营合同分成单独的 ServiceContract。
这听起来准确吗?还有其他选择吗?我已经研究过是否有办法为每个 OperationContract 指定 TransferMode,但我找不到任何方法可以做到这一点,因为它是绑定的设置,我不知道有任何方法可以为每个 OperationContract 指定单独的绑定.
推进我需要公开的一组服务的最佳选择是什么?
c# - 使用 NetTcpBinding 流回客户端回调时出现 WCF 错误
我有一个 WCF 服务,使用NetTcpBinding TransferMode.Streamed,我正在寻找使用它的回调流回客户端,但我得到了这个异常host.Open
:
Contract requires Duplex, but Binding 'NetTcpBinding' doesn't support it or isn't configured properly to support it.
服务接口:
我如何将流传递给客户端回调?
c# - WCF 流 - 限制速度
这是我申请中的一个严重问题,几个月来没有找到任何好的解决方案。我注意到 C# 管理 Stream 类在 WCF 中流式传输的方式,而不考虑我的配置。
首先,我有一个继承自 FileStream 的类,因此我可以随时查看从客户端读取了多少内容:
其次,下面是我读取包含文件的客户端流的服务方法。我的主要问题是 FileStreamWatching.Read 每次我从下面的这种方法召唤它时都不会启动,而是 FileStreamWatching.Read 每调用一次 X 次就启动一次。奇怪。
*稍后查看输出
这是每次激活 FileStreamWatching.Read 时客户端的输出:(请记住缓冲区长度仅为 1000!)
Arr 长度:256,阅读:256
Arr 长度:4096,阅读:4096
Arr 长度:65536,阅读:65536
Arr 长度:65536,阅读:65536
Arr 长度:65536,阅读:65536
Arr 长度:65536,阅读:65536
....直到文件传输完成。
问题:
- 我带到读取方法的缓冲区长度不是 256/4096/65536。它是 1000。
- 每次我从服务中调用 FileStreamWatching 类的读取时,它都不会启动。
我的目标:
控制每次阅读我从客户那里收到多少。
每次我从服务调用它时,FileStreamWatching.Read 都会启动。
我的客户端配置:
我的服务配置(这里没有配置文件):
wcf - WCF 服务将缓冲区逐帧流式传输到所有客户端
我正在寻找一种编写 wcf 服务的方法,该服务将逐帧缓冲区流式传输到所有客户端。我不想使用肥皂信封,并且可以从所有平台(如 windows、android 和 iPhone 客户端)使用相同的服务。我想手动控制媒体流。就像,在我的客户端表单应用程序中,我可以通过开始和停止按钮控制流式传输。我也想管理所有类型的错误处理。
我一直在谷歌上搜索我的要求,但我最终没有找到。我考虑过 nettcpbinding 但它也使用肥皂信封。在这里,我想要像基本 tcp 套接字这样的持久连接。
wcf - 使用 WCF 和 MTOM 进行流式传输
我正在使用具有流传输模式的 WCF 绑定,用于向/从服务上传和下载二进制内容。我已经设法让它工作了。我将包括配置、合同等以供参考。
我进行了一些测试来对不同的绑定和编码进行基准测试。上传结果似乎没问题。NetTcp 最快,其次是 BasicHttp-MTOM,然后是 BasicHttp-Text。让我吃惊的是,在下载大文件时,MTOM 的速度比使用 BasicHttp 的文本编码和使用 NetTcp 的二进制编码慢。
我错过了什么吗?为什么上传时 BasicHttp-MTOM 的工作速度比其他绑定慢?除此之外,我还为下载实现了双缓冲。这也适用于除具有 MTOM 编码的 BasicHttp 之外的所有绑定。为什么在使用 MTOM 时双缓冲没有帮助?
感谢您的阅读,您对此的建议和想法。
测试结果:
将 150 MB 二进制数据上传到服务。客户端从 150 MB 文件创建文件流并传递给服务器。服务器将流读入内存流。还没有双缓冲。结果似乎很快,因为没有将数据写入文件系统。绑定按预期执行。
从服务下载 100 MB 二进制数据。服务创建一个内存流并传递给客户端。客户端写入文件系统。这是单缓冲区和双缓冲区的结果。如您所见,MTOM 似乎非常慢,并且也不响应双缓冲。
服务器配置(为简单起见省略了一些部分):
客户端配置(为简单起见省略了一些部分):
服务合约:
消息合约:
编辑:这原来是我工作中的开发环境设置的一个问题。当我在家中进行相同的测试时,结果符合预期。
wcf - 如何从 WCF 服务方法在客户端并行读取流,而不会相互阻塞?
我正在尝试创建一个下载应用程序,其中将有四个或更多下载队列,用户可以使用这些队列从服务器下载文件。在不让队列相互阻塞的情况下,实现这一目标的最佳解决方案是什么。我在不同的后台线程中启动每个下载队列,当字节从服务中下载时,该线程向 WPF 客户端 UI 报告进度。但是,新的下载队列会阻止任何以前运行的下载队列。我尝试在 google 和 StackOverflow 上进行大量搜索,但仍然无法解决问题
应用方法: 我们使用 Windows Azure 服务总线通过 NetTcpRelayBinding 连接到我们的 WCF 服务。
客户端配置:
服务配置:
服务行为:
自从过去 2 周以来,我一直在努力解决这个问题,但仍然无法解决它。请通过建议链接或解决方案帮助我找到合适的方法。如果需要,请询问更多信息。提前致谢...
c# - WCF、流、消息合同错误:反序列化请求消息正文时出错
我开发了一些复杂的 WCF 服务方法。我想使用 Streaming 传输模式,因为我有多个参数,所以我定义了一个带有正文和标头的 MessageContract。
请注意,根据我在 MSDN 上阅读的指南,流是主体的唯一成员。
该方法定义如下:
当我尝试调用该方法(使用反射)时,出现错误:
反序列化操作“SaveReportAudio”的请求消息正文时出错。OperationFormatter 遇到无效的消息正文。预计会找到名称为“SaveReportAudio”和命名空间“ http://tempuri.org/ ”的节点类型“元素”。找到名称为“ReportAudioMessage”和命名空间“ http://tempuri.org/ ”的节点类型“元素”
SaveReportAudio 是我正在调用的服务方法的名称。ReportAudioMessage 是定义的 MessageContract 的名称。显然,我的 Soap Message 被抬高了,但我不知道如何...... :(
以下是服务的 web 配置的服务模型节点:
这里是客户端 App.Config 的服务模型节点:
c# - Stream.CopyTo() 方法可以保存不完整的流吗?
我有一个 WCF 服务,它允许我分块上传文件。我想知道的是,在任何情况下,这段代码是否会导致上传的流仅部分附加到目标流?
我的日志显示所有发送的流都是 512000 字节(我在客户端设置的),到目前为止,我已经发送了 9 个块中的 6 个块。但在服务器上,文件大小为 2634325。这意味着发送的最后一个块(第 6 个)保存不完整。
什么可能导致这种行为?我应该怎么做才能避免这种情况?
或者这是完全安全的,我应该在其他地方寻找错误?
以下是客户端文件上传代码片段:
c# - 通过 Web 浏览器从 WCF 服务主机加载时无法获取文件大小
我有一些带有流式 webHttpBinding 的测试 WCF 服务,它允许通过 Web 浏览器下载文件。问题是浏览器不显示文件大小和下载进度。这是服务合同:
这是服务实现:
这是服务配置:
文件名正确显示,但缺少有关文件大小的信息。