gpt4 book ai didi

.net - 简单的 WCF 调用需要很多时间

转载 作者:行者123 更新时间:2023-12-04 08:52:59 26 4
gpt4 key购买 nike

我正在创建一个 WCF 服务器-客户端应用程序。然而,在我的第一个测试中,一个简单的调用(该方法基本上只是 return true; )需要很多时间(~5 秒)

我试图追踪它,这是调用追踪的截图
enter image description here

正如您在第 2 行和第 3 行之间看到的那样,间隔了 5 秒(虽然老实说我不知道​​第 2 行和第 3 行是什么意思)

在客户端(调用者)的配置下,绑定(bind)是这样的(多为Visual Studio生成

    <wsHttpBinding>
<binding name="WSHttpBinding_IAgent" closeTimeout="00:01:00"
openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:01:00"
bypassProxyOnLocal="false" transactionFlow="false" hostNameComparisonMode="StrongWildcard"
maxBufferPoolSize="524288" maxReceivedMessageSize="65536" messageEncoding="Text"
textEncoding="utf-8" useDefaultWebProxy="true" allowCookies="false">
<readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384"
maxBytesPerRead="4096" maxNameTableCharCount="16384" />
<reliableSession ordered="true" inactivityTimeout="00:10:00"
enabled="false" />
<security mode="None">
</security>
</binding>
</wsHttpBinding>

并在服务器上
<wsHttpBinding>
<binding name="WSHttpBinding_IAgent" closeTimeout="00:01:00"
openTimeout="00:01:00" receiveTimeout="00:05:00" sendTimeout="00:05:00"
bypassProxyOnLocal="false" transactionFlow="false" hostNameComparisonMode="StrongWildcard"
maxBufferPoolSize="16777216" maxReceivedMessageSize="16777216"
messageEncoding="Text" textEncoding="utf-8" useDefaultWebProxy="true"
allowCookies="false">
<readerQuotas maxDepth="32" maxStringContentLength="16777216"
maxArrayLength="16384" maxBytesPerRead="16384" maxNameTableCharCount="16384" />
<reliableSession ordered="true" inactivityTimeout="00:10:00"
enabled="false" />
<security mode="None"/>
</binding>

我称之为这样的方式
var client = new AgentClient(binding, BuildEndpointAddress(hostName, port));
for(int i =0; i<10; i++)
client.IsAlive(); //this call is very slow despite just returning true;
// subsequent calls are also slow so probably not because of wake-up time

请注意此测试,服务器和客户端都在同一台计算机上,因此它不会是网络问题。知道是什么导致了速度缓慢,或者我如何找到更多信息来解决这个问题?

最佳答案

您的帖子中未指定应用程序的生命周期,我将假设您在第一次启动客户端应用程序并调用 WCF 服务时没有对其进行预热。

在这种情况下,时间安排是有意义的。

尽管使用了轻量级绑定(bind)和消息,但如果没有预热,.NET 会做很多隐藏的工作来初始化 ChannelFactory 和 Server。

这是 WCF 的本质,不会引起太多问题,因为预热后通信速度非常快。

尝试在一个应用 session 中连续两次调用您的服务,测量两次调用的时间。
如果两个电话都花费相当的时间,我的假设是错误的。

如果您想查看我的问题并比较环境 -

Why is the first WCF client call slow?

关于.net - 简单的 WCF 调用需要很多时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10876704/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com