- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
NewRelic stream & writeHeaders 也提出了类似的问题
我正在分析我在 New Relic 上的 WCF
服务。有一个 WCF
服务调用另一个 WCF
服务。现在我想在调用其他 WCF 服务时,当它创建请求时,内部进程在某处将标头写入请求流,这有时很慢。我在 New Relic 中发现的痕迹告诉我,对于我的一个 WCF 服务调用另一个 WCF
服务的方法的特定方法,大约需要 50-60
秒,其中 95-100 %
的时间被 System.Net.ConnectStream.WriteHeaders 消耗。
Stream[url of WCF service/soap]: WriteHeaders -> 99.78 % time (approx 49 seconds).
我不明白这是什么以及如何减少这段时间?
我进行了搜索,但没有找到 ConnectStream 实际执行的操作或有关它的一些详细信息,因此我无法找到任何方法来减少它所花费的时间。
请告诉我您的建议。
最佳答案
听起来您正在从客户端流式传输一个大文件,在一个 WCF Web 服务中捕获它,然后将数据重新写入一个新的 HttpWebRequest,然后将其发送到另一台主机。我想我很想尝试将数据从客户端缓冲到您的 Web 服务而不是流式传输。
去年我一直致力于一个听起来与您正在做的事情相似的项目。流式传输和缓冲之间的区别是:
流式读取(从源)然后写入(到目标)交互式过程中的数据,您无法对其进行太多控制。如果源文件很大(如演出或更多),WCF 请求/响应将在请求完成之前在客户端和主机之间来回迭代十几次或更多次。
另一方面,缓冲会在填充请求并将其发送到主机之前累积目标文件的全部内容,从而加快处理速度。由于缓冲(在内存中累积字节所需的时间)导致的性能损失由客户端承担,因此通常不是问题。
因此,当从客户端缓冲数据时,您的主机将收到一个带有完整字节数组(比方说)的 Http 请求,该字节数组已准备好重新打包到您传递给第二个目标 WCF 主机的请求中。在这一点上,您再次可以在缓冲和流式传输之间进行选择。在主机上,如果性能很重要,将请求流式传输到第二台主机将提高您的可伸缩性,但(再次)可能会损害您的性能速度。
在客户端:
With binding
.TransferMode =TransferMode.Buffered 'instead of Transfermode.Streamed
.MessageEncoding = WSMessageEncoding.Text
.TextEncoding = System.Text.Encoding.UTF8
.MaxReceivedMessageSize = Integer.MaxValue
.ReaderQuotas.MaxArrayLength = Integer.MaxValue
.ReaderQuotas.MaxBytesPerRead = Integer.MaxValue
.ReaderQuotas.MaxDepth = Integer.MaxValue
.ReaderQuotas.MaxNameTableCharCount = Integer.MaxValue
.ReaderQuotas.MaxStringContentLength = Integer.MaxValue
.MaxBufferSize = Integer.MaxValue
.MaxBufferPoolSize = Integer.MaxValue
在主机端:
With binding
.TransferMode = TransferMode.Buffered
.MaxReceivedMessageSize = Integer.MaxValue
关于performance - 流 writeheaders 花费太多时间 WCF,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16034937/
res.writeHead(301, "" + "" + "" + "" + "Hola Mundo" + "" +
我们目前正在评估 New Relic,有一个跟踪元素,我不确定我是否正确理解“(WPF 客户端和 WCF 后端)” - 它通常显示“stream[some url...]writeheaders”。我
我知道response.writeHead()始终用于处理服务器响应。为什么我们必须包含它,如果我们省略它会发生什么? 例如,当使用以下代码配置服务器时,如果我省略 writeHead() 部分,代码
在 Node.JS 中运行以下代码时会产生一些错误,但我无法理解为什么 var http = require("http"), fs = require("fs"); function onReque
我试图在 golang 中使用 httptest 包。我发现了一些我不明白的东西。这是 code : package main import ( "fmt" "io/ioutil"
NewRelic stream & writeHeaders 也提出了类似的问题 我正在分析我在 New Relic 上的 WCF 服务。有一个 WCF 服务调用另一个 WCF 服务。现在我想在调用其
美好的一天, 我正在创建一个 spring 批处理,它将在文本中写入输出。 基本上输出将是 1 行标题和多行详细信息。 然后,在 xml 中,我设置了 献给我的作家。 在我的 writer java
我在中定义了一个自定义函数 custom_file.py import csv def write_dict_to_csv(columns=None, file_name=None, data=Non
我正在实现自己的 http 模块。当我阅读官方的 node.js http 模块 api 时,我无法理解一些事情: 如果用户正在使用 response.writeHead(statusCode, [r
所以我正在编写一个基本的网络应用程序,但在成功登录后无法重定向用户。代码是: t, err := template.ParseFiles("home.html") if err != nil {
我是新手,很难渲染模板。 这是我生成模板的函数: 基础.html //Render templates for the given name, template definition and data
我有一个最基本的 net/http 程序,用来学习 Go 中的命名空间: package main import ( "fmt" "log" "net/http" ) func
在我的 node.js 网页中,我正在制作类似于 Facebook 链接预览的页面预览。我正在调用以获取页面的 html,并使用它来创建预览。 $.ajax({ type: 'GET',
我正在使用以下代码使用 python 将传递给函数的字典写入 csv 文件 def addToLog(self,content): filename = "myfile.csv" fi
我用express创建了一个http服务器。下面是服务器代码: router.get('/', function(req, res, next) { // req.socket.setTimeou
我一直在尝试遵循一些 Node js 教程,但我似乎无法这样做,因为 response.writeHead 不在那里.. var http = require("http"); http.create
好的,我是 Node.js 的新手,所以请原谅菜鸟问题。这是我的简单代码: var http = require('http'); var fs = require('fs'); // simple
我想先打印出文本消息,然后在文本下方显示图像。但我收到了 http: multiple response.WriteHeader calls 错误。 我如何在一个页面中使用一个 hadler 提供图像
这几天我在研究通过websoket发送消息,使用Beego框架。但是遇到错误信息http: multiple response.WriteHeader calls问题出在哪里?任何提示都会很棒! fu
我知道 http.ResponseWriter 的 WriteHeader 方法每个 HTTP 响应只能调用一次,只能有一个响应状态代码,并且只能发送一次 header 。这一切都很好。 问题是,如果
我是一名优秀的程序员,十分优秀!