问题标签 [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.

0 投票
2 回答
294 浏览

c# - 使用 WCF 接收大对象

我试图通过 WCF 接收带有 XML 的大对象。如果我设置它不起作用maxStringContentLength={Default value}

它仅在我增加时才有效,maxStringContentLength但会降低性能。

有没有不增加这个问题的解决方案maxStringContentLength

0 投票
0 回答
235 浏览

wcf-binding - 是否可以在同一服务中混合流传输和非流传输 WCF OperationContracts?

我有一组在单个 ServiceContract 中定义的操作,现在其中两个已切换为直接获取和返回 MessageContracts,其中包含 MSDN 文档中概述的 Stream 主体。我已经对此进行了测试,它似乎工作正常,但是现在当我在同一个 ServiceContract 中调用我的其他操作时,它采用简单的 RPC 样式参数和返回类型,我得到以下异常。

如果我了解发生了什么,我认为问题在于我已将服务器和客户端的 TransferMode 在两个方向上都设置为 Streamed,以促进基于 MessageContract 的操作,但这一定会破坏我之前工作的非基于 MessageContract 的操作我介绍了流媒体。

那么也许我只有这两个选择:

  1. 在此服务中重新编写我的所有操作合同,以便它们基于 MessageContract,也许还可以为主体公开一个 Stream。在这一点上,我不确定是否需要 Stream,或者我是否可以将其设置为 null 或将其完全从消息中排除。
  2. 根据传输模式将我的运营合同分成单独的 ServiceContract。

这听起来准确吗?还有其他选择吗?我已经研究过是否有办法为每个 OperationContract 指定 TransferMode,但我找不到任何方法可以做到这一点,因为它是绑定的设置,我不知道有任何方法可以为每个 OperationContract 指定单独的绑定.

推进我需要公开的一组服务的最佳选择是什么?

0 投票
1 回答
2186 浏览

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.

服务接口:

我如何将流传递给客户端回调?

0 投票
1 回答
1222 浏览

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


....直到文件传输完成。

问题:

  1. 我带到读取方法的缓冲区长度不是 256/4096/65536。它是 1000。
  2. 每次我从服务中调用 FileStreamWatching 类的读取时,它都不会启动。

我的目标:

  1. 控制每次阅读我从客户那里收到多少。

  2. 每次我从服务调用它时,FileStreamWatching.Read 都会启动。

我的客户端配置:

我的服务配置(这里没有配置文件):

0 投票
0 回答
170 浏览

wcf - WCF 服务将缓冲区逐帧流式传输到所有客户端

我正在寻找一种编写 wcf 服务的方法,该服务将逐帧缓冲区流式传输到所有客户端。我不想使用肥皂信封,并且可以从所有平台(如 windows、android 和 iPhone 客户端)使用相同的服务。我想手动控制媒体流。就像,在我的客户端表单应用程序中,我可以通过开始和停止按钮控制流式传输。我也想管理所有类型的错误处理。

我一直在谷歌上搜索我的要求,但我最终没有找到。我考虑过 nettcpbinding 但它也使用肥皂信封。在这里,我想要像基本 tcp 套接字这样的持久连接。

0 投票
1 回答
13901 浏览

wcf - 使用 WCF 和 MTOM 进行流式传输

我正在使用具有流传输模式的 WCF 绑定,用于向/从服务上传和下载二进制内容。我已经设法让它工作了。我将包括配置、合同等以供参考。

我进行了一些测试来对不同的绑定和编码进行基准测试。上传结果似乎没问题。NetTcp 最快,其次是 BasicHttp-MTOM,然后是 BasicHttp-Text。让我吃惊的是,在下载大文件时,MTOM 的速度比使用 BasicHttp 的文本编码和使用 NetTcp 的二进制编码慢。

我错过了什么吗?为什么上传时 BasicHttp-MTOM 的工作速度比其他绑定慢?除此之外,我还为下载实现了双缓冲。这也适用于除具有 MTOM 编码的 BasicHttp 之外的所有绑定。为什么在使用 MTOM 时双缓冲没有帮助?

感谢您的阅读,您对此的建议和想法。

测试结果:

将 150 MB 二进制数据上传到服务。客户端从 150 MB 文件创建文件流并传递给服务器。服务器将流读入内存流。还没有双缓冲。结果似乎很快,因为没有将数据写入文件系统。绑定按预期执行。

上传

从服务下载 100 MB 二进制数据。服务创建一个内存流并传递给客户端。客户端写入文件系统。这是单缓冲区和双缓冲区的结果。如您所见,MTOM 似乎非常慢,并且也不响应双缓冲。

下载

服务器配置(为简单起见省略了一些部分):

客户端配置(为简单起见省略了一些部分):

服务合约:

消息合约:


编辑:这原来是我工作中的开发环境设置的一个问题。当我在家中进行相同的测试时,结果符合预期。

下载

0 投票
1 回答
302 浏览

wcf - 如何从 WCF 服务方法在客户端并行读取流,而不会相互阻塞?

我正在尝试创建一个下载应用程序,其中将有四个或更多下载队列,用户可以使用这些队列从服务器下载文件。在不让队列相互阻塞的情况下,实现这一目标的最佳解决方案是什么。我在不同的后台线程中启动每个下载队列,当字节从服务中下载时,该线程向 WPF 客户端 UI 报告进度。但是,新的下载队列会阻止任何以前运行的下载队列。我尝试在 google 和 StackOverflow 上进行大量搜索,但仍然无法解决问题

应用方法: 我们使用 Windows Azure 服务总线通过 NetTcpRelayBinding 连接到我们的 WCF 服务。

客户端配置:

服务配置:

服务行为:

自从过去 2 周以来,我一直在努力解决这个问题,但仍然无法解决它。请通过建议链接或解决方案帮助我找到合适的方法。如果需要,请询问更多信息。提前致谢...

0 投票
1 回答
3380 浏览

c# - WCF、流、消息合同错误:反序列化请求消息正文时出错

我开发了一些复杂的 WCF 服务方法。我想使用 Streaming 传输模式,因为我有多个参数,所以我定义了一个带有正文和标头的 MessageContract。

请注意,根据我在 MSDN 上阅读的指南,流是主体的唯一成员。

该方法定义如下:

当我尝试调用该方法(使用反射)时,出现错误:

反序列化操作“SaveReportAudio”的请求消息正文时出错。OperationFormatter 遇到无效的消息正文。预计会找到名称为“SaveReportAudio”和命名空间“ http://tempuri.org/ ”的节点类型“元素”。找到名称为“ReportAudioMessage”和命名空间“ http://tempuri.org/ ”的节点类型“元素”

SaveReportAudio 是我正在调用的服务方法的名称。ReportAudioMessage 是定义的 MessageContract 的名称。显然,我的 Soap Message 被抬高了,但我不知道如何...... :(

以下是服务的 web 配置的服务模型节点:

这里是客户端 App.Config 的服务模型节点:

0 投票
1 回答
533 浏览

c# - Stream.CopyTo() 方法可以保存不完整的流吗?

我有一个 WCF 服务,它允许我分块上传文件。我想知道的是,在任何情况下,这段代码是否会导致上传的流仅部分附加到目标流?

我的日志显示所有发送的流都是 512000 字节(我在客户端设置的),到目前为止,我已经发送了 9 个块中的 6 个块。但在服务器上,文件大小为 2634325。这意味着发送的最后一个块(第 6 个)保存不完整。

什么可能导致这种行为?我应该怎么做才能避免这种情况?

或者这是完全安全的,我应该在其他地方寻找错误?

以下是客户端文件上传代码片段:

0 投票
1 回答
118 浏览

c# - 通过 Web 浏览器从 WCF 服务主机加载时无法获取文件大小

我有一些带有流式 webHttpBinding 的测试 WCF 服务,它允许通过 Web 浏览器下载文件。问题是浏览器不显示文件大小和下载进度。这是服务合同:

这是服务实现:

这是服务配置:

文件名正确显示,但缺少有关文件大小的信息。