【问题标题】:WCF Performance : Connection to WCF Service takes long timeWCF 性能:连接到 WCF 服务需要很长时间
【发布时间】:2013-03-13 04:59:20
【问题描述】:

我的服务器上有一个托管在 IIS 7.5 上的 WCF 服务。我在我的服务中使用了 Entity framework 5.0。

当我通过添加服务引用并在站点中创建客户端从本地系统调用该服务时,大约需要 40 秒才能获得响应。我尝试调用我本地的相同服务,这里只需要 3-4 秒。

将服务器上的服务的引用添加到本地系统上的站点后,Web 配置中添加的绑定和端点如下所示:

<binding name="WSHttpBinding_IMyWCFService" closeTimeout="00:01:00"
          openTimeout="00:01:00" receiveTimeout="00:50:00" sendTimeout="00:01:00"
          bypassProxyOnLocal="false" transactionFlow="false" hostNameComparisonMode="StrongWildcard"
          maxBufferPoolSize="524288" maxReceivedMessageSize="2147483647"
          messageEncoding="Text" textEncoding="utf-8" useDefaultWebProxy="true"
          allowCookies="false">
          <readerQuotas maxDepth="32" maxStringContentLength="2147483647"
            maxArrayLength="16384" maxBytesPerRead="4096" maxNameTableCharCount="16384" />
          <reliableSession ordered="true" inactivityTimeout="00:10:00"
            enabled="false" />
          <security mode="Transport">
            <transport clientCredentialType="None" proxyCredentialType="None"
              realm="" />
            <message clientCredentialType="Windows" negotiateServiceCredential="true" />
          </security>
        </binding>




<endpoint address="https://<url>/MyWCFService.svc/soap"
        binding="wsHttpBinding" bindingConfiguration="WSHttpBinding_IMyWCFService"
        contract="MerchantService.IMyWCFService" name="WSHttpBinding_IMyWCFService" />

首先我认为这是实体框架的问题。但后来我使用实体框架分析器检查了该方法的执行时间。它几乎不需要 1 秒。

当我调用服务时,它需要添加一个我正在添加的标题。

那么,这需要 40 秒的时间。而且它的启动速度并不慢,也不是第一次花时间。总是要花这么多时间。

网络速度是否可能是导致此延迟的原因。如果有,达到什么程度?

服务返回一个列表List。这可能是一个问题,我们不应该返回列表。有什么替代方案?

此外,实体框架是否会在每次请求到来时建立与数据库的连接以及数据库连接是否需要时间。可以吗?

请帮忙。 谢谢

【问题讨论】:

    标签: c# .net performance wcf entity-framework


    【解决方案1】:

    首先,我使用的是代码优先方法。并且为了提高性能,我尝试预先生成视图,这样可以减少第一次生成视图的开销。但我认为这些观点是行不通的。 因此,我尝试切换到 Database First 方法,然后生成视图并将该构建上传到远程服务器。现在时间从40秒减少到10秒。我还尝试在 WCF 服务启动时打开数据库连接。它再次将时间缩短到 5 秒。

    【讨论】:

      【解决方案2】:

      我建议逐步隔离问题

      1) 要确定网络带宽是否是问题所在,只需托管一个返回一些简单值(如整数或字符串)的简单服务并检查其响应时间。

      2) 如果第 1 步中的响应时间得到显着改善,请查看数据库或列表问题。

      【讨论】:

      • 您好 Deepansh,感谢您的回复。网络可能是增加时间的问题,但是在最快的 n/w 中我可以测试我的服务,我发现时间是 25 秒。我发现问题出在EF上。请看答案。
      【解决方案3】:

      我怀疑您的问题是凭证协商。有一种简单的方法可以验证这一点,只需在没有安全性的情况下在同一台服务器上运行服务(如果允许的话)。

      一种可能的补救方法是通过将negotiateServiceCredential 属性设置为false 来消除SOAP 凭据协商。您需要先确保为您的域启用了 Kerberos。

      【讨论】:

      • 嗨,保罗。问题出在EF上。请看我的回答。感谢您的回复。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-12-28
      • 2020-01-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多