繁体   English   中英

当aspNetCompatibilityEnabled设置为false时,WCF OneWay服务会变慢

[英]WCF OneWay service slows down when aspNetCompatibilityEnabled is set to false

我在Visual Studio 2017.NET 4.5中创建了一个简单的WCF服务。 (添加新项-> WCF服务)。 它更改了web.config并将aspNetCompatibilityEnabled设置为true 因此,该服务以ASP.NET兼容模式运行。

<serviceHostingEnvironment aspNetCompatibilityEnabled="true"
  multipleSiteBindingsEnabled="true" />

该服务具有一种OneWay方法:

[OperationContract(IsOneWay = true)]
void DoWork();

实现看起来像这样:

public void DoWork()
{
    var threadId = Thread.CurrentThread.ManagedThreadId;
    Debug.WriteLine("Starting..." + threadId);
    Thread.Sleep(TimeSpan.FromSeconds(30));
    Debug.WriteLine("Finished..." + threadId);
}

这像预期的那样工作。 一个人可以发送请求,然后立即返回而无需回答。 我可以发送许多请求,然后立即返回。

但是,如果我更改aspNetCompatibilityEnabled="false"并设置

[AspNetCompatibilityRequirements(
RequirementsMode = AspNetCompatibilityRequirementsMode.NotAllowed)] 

在服务类上,服务速度变慢。 它只能处理3个请求,第4个仅等待。 该服务不会立即返回没有答案。 看起来,一次只能处理3个请求。

是什么解释了这种行为? 每个设置都是默认设置, web.config没有任何特殊设置。

如果您的应用程序托管在IIS中,并且设置了aspNetCompatibilityEnabled='false'则请求将不会流经ASP.NET http管道。 行为缓慢的原因之一可能是,由于请求没有利用管道,IIS花费了一些时间来运行接收和将请求传递给WCF所需的脚本。 默认情况下,WCF一次只能处理一个请求,直到您指定其他并发级别为止。 其他请求必须等待,直到处理上一个请求。 是ASP.NET HTTP管道保存请求队列并一次处理一个请求队列。 我相信在这种情况下,由于失去了ASP.NET HTTP管道的优势,因此非ASP.NET管道无法正确处理请求队列。 我希望这回答了你的问题。 下面提到了一些与此有关的其他文档

https://docs.microsoft.com/en-us/dotnet/framework/wcf/feature-details/wcf-services-and-aspnet

https://docs.microsoft.com/en-us/dotnet/framework/configure-apps/file-schema/wcf/servicehostingenvironment

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM