我们有一个网站,可通过http流文本数据。它是通过以下方式设置的:
Content-Type 是 text/plainTransfer-Encoding 是 chunked当使用纯curl文本或FireFox时,文本从第一个字节流到浏览器。但是,使用Chrome浏览器时,在发送1024个字节之前不会显示任何文本。之后,一切都会立即显示出来。
问题:有没有办法禁用这种缓冲行为?
更多信息:这是一个简单的ASP.NET页面,演示了该行为:
<%@ language=c# %>
<%
Response.BufferOutput = false;
Response.ContentType = "text/plain";
for (int i=0; i<50; i++)
{
Response.Write("01234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567\r\n");
System.Threading.Thread.Sleep(1000);
}
%>
Run Code Online (Sandbox Code Playgroud)
使用禁用压缩的web.config:
<configuration>
<system.webServer>
<urlCompression doStaticCompression="false" doDynamicCompression="false"/>
</system.webServer>
</configuration>
Run Code Online (Sandbox Code Playgroud)
我还在http://bufferingtest.azurewebsites.net/上运行了一个实时repro 。只需从Chrome和FireFox两者中点击它,即可观察到不同的行为。
我有一个Azure PaaS实例在Tomcat8容器中运行Spring-Boot打包的"war".问题是,经过一段时间的活动后,"java"进程被终止.
上面的图片是tomcat进程未被杀死时的样子.
只有当我再次向服务器发出任何类型的请求时,tomcat进程才会再次启动.
如果我的理解是正确的,标志'WEBSITE_SCM_ALWAYS_ON_ENABLED'是为了让实例保持活跃,即'w3wp'进程,而不是Tomcat.
解决此问题的一个方法是使用简单的"运行状况"请求"轮询"我的服务器以使其保持活动状态.
如果它的'httpPlatformHandler'有一些Azure配置或Spring-boot配置会更好,这样我就可以防止它进入睡眠状态.
任何帮助表示赞赏.
****更新****
在@DavidEbbo的进一步帮助下,问题被追溯到我从"http"到"https"网址的URL"重写"规则."AlwaysOn"请求在HTTP(端口80)上,因此每当命中Azure请求时,它都会获得重定向(301)作为响应.仍在等待解决方案.
我有一个使用队列,存储和表的云服务,该服务具有Web角色和辅助角色。我将其发布到Azure,一切似乎都很好。当我单击Web应用程序URL时,出现以下错误:
编译器错误消息:编译器失败,错误代码-2146232576。
如果我在本地部署Web应用程序,一切正常!有谁可以帮助我吗?我尝试在网上查找,但找不到解决方案,对此我很陌生。
请考虑以下代码:
class Program {
void Foo<T>() { }
static void Main(string[] args) {
dynamic p = new Program();
p.Foo();
}
}
Run Code Online (Sandbox Code Playgroud)
请注意,对p.Foo()的调用无效,因为动态绑定器无法知道要用于T的类型.具体的失败是:
" 无法从用法中推断出方法'ConsoleApplication1.Program.Foo()'的类型参数.请尝试明确指定类型参数. "
现在我的问题是:有没有办法指定泛型类型,或者这种方法是不是可以使用'dynamic'来调用?
我需要使用反射Emit来定义这样的东西:
public class Foo {
public Bar Bar { get; set; }
}
public class Bar {
public Foo Foo { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
困难在于,当调用TypeBuilder.DefineProperty()时,我需要传递属性的返回值的System.Type,该值尚不存在.如果参考只采用一种方式,那将很容易,但两种方式都会导致鸡和蛋的问题.
我希望找到一个带有TypeBuilder而不是Type的重载,这可以让我同时定义这两个类,然后在两端调用TypeBuilder.CreateType().但我没有看到这样的事情.
解决这个问题的正确方法是什么?
我们看到一种奇怪的行为,即在创建新进程之前,缓存中无法使用WebRequest API缓存(在IE/wininet缓存中)缓存的内容.
请考虑以下代码:
using System;
using System.IO;
using System.Net;
using System.Net.Cache;
using System.Threading;
namespace HttpCachingTest {
class Program {
static void Main(string[] args) {
MakeRequest();
Thread.Sleep(1000);
MakeRequest();
}
private static void MakeRequest() {
var request = (HttpWebRequest)WebRequest.Create("http://a0.twimg.com/a/1286210883/images/twitter_logo_header.png");
request.CachePolicy = new HttpRequestCachePolicy(HttpRequestCacheLevel.Default);
var response = (HttpWebResponse)request.GetResponse();
Console.WriteLine(String.Format("IsFromCache: {0}, ContentLength: {1}", response.IsFromCache, response.ContentLength));
using (var fileStream = File.OpenWrite("test.jpg")) {
response.GetResponseStream().CopyTo(fileStream);
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
我们看到的行为是,对于第二个请求,IsFromCache为false.但是,如果我们第二次运行应用程序,则IsFromCache为true.这意味着事物被正确缓存,但那些刚刚缓存的东西对当前进程不可用,这没什么意义.
任何人都可以解释这种行为,并知道如何修复它,以便缓存的项目可以立即被击中?
假设我在PowerShell字符串中有一段JSON,例如
$s = '{"foo":"hello"}'
Run Code Online (Sandbox Code Playgroud)
我的目标是将其转换为我可以操作的对象(例如,更改/添加属性),然后转换回json字符串.
所以试着显而易见,我写道:
$o = $s | ConvertFrom-Json # convert the json string to an object
$o.foo = "hello2" # change an existing prop
$o.bar = "World" # add a new prop
$s2 = $o | ConvertTo-Json # convert back into a json string
Run Code Online (Sandbox Code Playgroud)
问题是我从中返回的对象ConvertFrom-Json是类型PSCustomObject,不允许添加属性.所以第3行爆发了:
Exception setting "bar": "The property 'bar' cannot be found on this object. Verify that the property exists and can be set."
At line:1 char:1
问题:在没有带来太多复杂性的情况下,最好的方法是什么?
如果我运行:
git config foo.bar hello
Run Code Online (Sandbox Code Playgroud)
它将以下内容添加到我的 repo 的本地 .git\config 文件中:
[foo]
bar = hello
Run Code Online (Sandbox Code Playgroud)
但是现在假设我想将以下内容添加到相同的配置中(这是lfs使用的内容,但这超出了重点):
[filter "lfs"]
clean = git-lfs clean %f
smudge = git-lfs smudge %f
required = true
Run Code Online (Sandbox Code Playgroud)
问题:是否有一个 git 命令可以添加这个?
我无法在git config这里工作,因为密钥需要类似于filter "lfs".clean它不被视为有效密钥的东西。
c# ×3
azure ×2
asp.net ×1
dynamic ×1
generics ×1
git ×1
http ×1
json ×1
powershell ×1
spring ×1
spring-boot ×1
streaming ×1
tomcat ×1
webrequest ×1