问题标签 [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 回答
1191 浏览

wcf - 将流上传到 WCF IIS 7 托管服务不起作用

我有一个设置为在 IIS 7 下运行的 wcf 服务。我将服务设置为传输模式的流式传输。当我在控制台应用程序中自行托管服务时,一切似乎都正常。但是当客户端连接到 iis 托管服务时,它似乎正在缓冲,客户端最终超时。我已经使用 fiddler 来确定这个客户端超时发生在甚至发出 http 请求之前。

这是服务器绑定。

和客户端绑定:

顺便说一句,连接超时,因为流是无限的,服务器应该读取前几个字节,然后关闭流。

0 投票
0 回答
356 浏览

wcf - 如何在 WCF 中上传文件以及识别凭据?

我遇到了 WCF、流式传输和安全性问题,这不是最大的问题,但我想了解人们对如何解决它的想法。

我需要允许客户端将文件上传到服务器,我通过使用 BasicHttpBinding 的 transferMode="StreamedRequest" 功能来允许这样做。当他们上传文件时,我想将此文件以事务方式放置在文件系统中,并使用文件的元数据更新数据库(我实际上使用的是 Sql Server 2008 的 FILESTREAM 数据类型,它本机支持这一点)。我正在使用 WCF Windows 身份验证并将 Kerberos 凭据委托给 SQL Server 以进行我的所有数据库身份验证。

问题是,正如我得到有用的注释,“HTTP 请求流不能与 HTTP 身份验证结合使用”。因此,对于我的上传文件服务,我无法将 Windows 身份验证令牌与消息调用一起传递。即使我没有使用 SQL Server 登录,我什至无法通过他们的 Windows 凭据识别我的调用客户端。

我暂时解决了这个问题,让上传方法不安全,并将文件转储到临时存储并返回定位器 GUID。然后,客户端再次调用安全的非流式服务,传递 GUID,该 GUID 使用 Windows 身份验证将文件从临时存储上传到数据库。

显然,这并不理想。从性能的角度来看,我正在对磁盘进行额外的读/写。从可扩展性的角度来看,(原则上,使用负载均衡器)不能保证我在随后的两个调用中访问同一台服务器,这意味着临时文件存储需要位于共享位置,这意味着不是可扩展的设计.

有人能想出更好的方法来处理这种情况吗?就像我说的那样,这不是最大的交易,因为 a) 我真的不需要扩展这个东西,没有太多的用户,b) 这些上传/下载并没有被调用很多。但是,我仍然想知道我是否在这里遗漏了一个明显的解决方案。

谢谢,丹尼尔

0 投票
4 回答
4818 浏览

c# - WCF Stream.Read 总是在客户端返回 0

我花了大部分时间试图弄清楚为什么这不起作用。我有一个将对象流式传输到客户端的 WCF 服务。然后客户端应该将文件写入其磁盘。但是当我调用stream.Read(buffer, 0, bufferLength)它时,它总是返回 0。这是我的代码:

服务配置文件:

客户:

客户端 app.config:

(为简洁起见,剪掉了一些代码)

我已经阅读了有关制作 WCF 流服务的所有内容,我的代码看起来与他们的代码没有什么不同。我可以用缓冲替换流式传输并以这种方式发送对象,但是当我尝试流式传输时,客户端总是将流视为“空”。已testFile.exe创建,但其大小为 0KB。

我错过了什么?


更新
人力资源管理。好吧,我无法调试它,因为当我尝试它时它告诉我 WCF 测试客户端不支持 Streams。但是,我知道有些东西正在流中传递,因为如果我不放置 while 循环,而只有一个 fs.Write(...),一旦流关闭,它将写入 8KB。所以有些事情正在发生。

我看了你的帖子并补充说:

到我的 IStreamService。downloadStreamFile()现在返回一个FileDownloadMessage对象。

但是在我的客户端更新服务引用后,它认为downloadStreamFile()返回一个TestApp.StreamServiceRef.MemoryStream对象。
它还创建了一个downloadStreamFileRequest()类,我没有创建,也不知道它来自哪里。

0 投票
2 回答
2238 浏览

c# - 如何在流式 wcf 结束后删除文件

我使用 netTcpBinding 和流式传输将文件从一台服务器发送到另一台服务器,如codeproject 文章中所述,据我了解,在 wcf 中,当我们要发送流时,我们应该创建并将其作为消息合同返回,问题是如何完成文件发送?因为我想在文件发送保证完成后将文件从收件箱移动到发件箱

0 投票
2 回答
555 浏览

c# - WCF 的流式传输限制

根据 MSDN 上的以下指南,任何使用流传输的操作都只能有一个输入/输出参数。

链接: http: //msdn.microsoft.com/en-us/library/ms731913.aspx(参见标题“流传输的限制”)

我正在为 WCF 服务使用流传输,该服务允许客户端/消费者将文件上传到它。上传本身工作正常,但我需要一种方法来传递另外两个输入参数以及 Stream 对象:'string filename' 和 'int userid'。

我该怎么做呢?

0 投票
2 回答
6804 浏览

c# - 使用 MessageContract 在启动时使 WCF 服务崩溃

我正在尝试将 MessageContract 添加到我的 WCF 服务中,类似于这个问题中发生的事情:WCF: using streaming with Message Contracts

这是我得到的异常: 无法加载操作“UploadFile”,因为它具有 System.ServiceModel.Channels.Message 类型的参数或返回类型,或者具有 MessageContractAttribute 和其他不同类型参数的类型。当使用 System.ServiceModel.Channels.Message 或带有 MessageContractAttribute 的类型时,该方法不得使用任何其他类型的参数。

这是我的合同:

这是我在 app.config 中使用的绑定配置:

现在我在想这可能与我正在使用的绑定类型有关,但我并不完全确定。

0 投票
1 回答
472 浏览

c# - 将配置移动到代码后缓冲 WCF 流式响应

我有客户端服务器应用程序使用带有流式响应服务的 net.tcp 绑定,所有 WCF 配置都已在 app.config 中定义并且一切正常,没有问题,我不得不从客户端应用程序中删除配置并在代码中定义它们,什么都没有在服务器上进行了更改,但客户端似乎将响应作为缓冲而不是通过此转换流式传输,这是我在客户端代码中构建服务的方式:

0 投票
0 回答
2206 浏览

asp.net - WCF Service Error : Exception Details: System.Net.WebException: The remote server returned an error: (400) Bad Request

I created a web service to upload files over http but on my first try, it is failing.

My web service is running on my local computer's IIS 7, under ASP.NET 4 Integrated App Pool. Here this is my web service's web.config;

This is the web.config file of the client;

Here is the error I receive;

The remote server returned an error: (400) Bad Request.

Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.

Exception Details: System.Net.WebException: The remote server returned an error: (400) Bad Request.

Source Error:

Line 120:
[System.ComponentModel.EditorBrowsableAttribute(System.ComponentModel.EditorBrowsableState.Advanced)] Line 121:
FileUploadWcfServiceClient.TransferService.UploadFileResponse FileUploadWcfServiceClient.TransferService.ITransferService.UploadFile(FileUploadWcfServiceClient.TransferService.RemoteFileInfo request) { Line 122: return base.Channel.UploadFile(request); Line 123: } Line 124:

Source File: C:\Apps\FileUploadWcfService\FileUploadWcfServiceClient\Service References\TransferService\Reference.cs Line: 122

Stack Trace:

[WebException: The remote server returned an error: (400) Bad Request.] System.Net.HttpWebRequest.GetResponse() +6111059
System.ServiceModel.Channels.HttpChannelRequest.WaitForReply(TimeSpan timeout) +48

[ProtocolException: The remote server returned an unexpected response: (400) Bad Request.]
System.Runtime.Remoting.Proxies.RealProxy.HandleReturnMessage(IMessage reqMsg, IMessage retMsg) +9456095
System.Runtime.Remoting.Proxies.RealProxy.PrivateInvoke(MessageData& msgData, Int32 type) +345
FileUploadWcfServiceClient.TransferService.ITransferService.UploadFile(RemoteFileInfo request) +0
FileUploadWcfServiceClient.TransferService.TransferServiceClient.FileUploadWcfServiceClient.TransferService.ITransferService.UploadFile(RemoteFileInfo request) in C:\Apps\FileUploadWcfService\FileUploadWcfServiceClient\Service References\TransferService\Reference.cs:122
FileUploadWcfServiceClient.Default.Button1_Click(Object sender, EventArgs e) in C:\Apps\FileUploadWcfService\FileUploadWcfServiceClient\Default.aspx.cs:85 System.Web.UI.WebControls.Button.OnClick(EventArgs e) +118
System.Web.UI.WebControls.Button.RaisePostBackEvent(String eventArgument) +112
System.Web.UI.WebControls.Button.System.Web.UI.IPostBackEventHandler.RaisePostBackEvent(String eventArgument) +10
System.Web.UI.Page.RaisePostBackEvent(IPostBackEventHandler sourceControl, String eventArgument) +13
System.Web.UI.Page.RaisePostBackEvent(NameValueCollection postData) +36 System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +5563

Version Information: Microsoft .NET Framework Version:4.0.30319; ASP.NET Version:4.0.30319.225

The file that I am trying to upload is 217 KB so I am guessing the file size is not the problem here.

What do you think causing the error?

0 投票
1 回答
9615 浏览

c# - .NET 4 上的 WCF 流式文件传输

我需要一个关于 WCF 流式传输文件传输的好例子。

我找到了几个并尝试了它们,但是这些帖子很旧,而且我在 .net 4 和 IIS 7 上工作,所以存在一些问题。

你能给我一个很好的和最新的例子吗?

0 投票
1 回答
287 浏览

wcf - WCF 不支持通过 HTTP 身份验证的 HTTP 请求流的原因是什么?

WCF 不支持通过 HTTP 进行 HTTP 身份验证的请求流式传输(也就是大数据的流式上传)。我的第一个猜测是因为身份验证握手导致流请求被发送两次到服务器。但是对于缓冲模式下的大请求也是如此,所以它没有意义。

您可以在自定义 ASP.NET http 处理程序中使用 HTTP 身份验证轻松实现请求流。如果您可以控制客户端,您甚至可以通过执行显式 HTTP HEAD 对服务器进行预身份验证,然后重用持久连接来使用 HTTP POST 执行实际的流式传输请求,从而避免“多个请求问题”。

那么有人能想到 WCF 不支持这一点的原因吗?(除了没有时间这样做)

谢谢