WCF通话需要20秒

时间:2012-10-25 18:36:49

标签: c# wcf

我对WCF有些新意,并且获取记录的调用花了将近20秒,即使调试期间本地调用需要花费时间。它正确完成但速度很慢。

客户来电:

var docImgSvc = new DocImagingService.DocImagingStatusServiceClient("WSHttpBinding_IDocImagingStatusService");
CurrentManifest = docImgSvc.GetManifest(manifestLookup);  //<<---This takes 20 secs
if (CurrentManifest == null || CurrentManifest.ManifestId == 0)

服务器例程:

public Manifest GetManifest(int manifestNumber)
{
    var de = new DocumentImagingEntities(); //<<---Takes 20 secs before it gets here.
    var manifest = de.Manifests.FirstOrDefault(m => m.ManifestId == manifestNumber);
    return manifest;
}

服务器配置:

  <system.serviceModel>
<services>
  <service name="DocImagingServices.DocImagingStatusService">
    <host>
      <baseAddresses>
        <add baseAddress="http://localhost:8732/Design_Time_Addresses/DocImagingServices/DocImagingStatusService/"/>
      </baseAddresses>
    </host>
    <endpoint address="" binding="wsHttpBinding" contract="DocImagingServices.IDocImagingStatusService">
      <identity>
        <dns value="localhost"/>
      </identity>
    </endpoint>
    <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange"/>
  </service>
</services>
<behaviors>
  <serviceBehaviors>
    <behavior>
      <serviceMetadata httpGetEnabled="True"/>
      <serviceDebug includeExceptionDetailInFaults="true"/>
    </behavior>
  </serviceBehaviors>
</behaviors>

客户端配置:

  <system.serviceModel>
<bindings>
  <wsHttpBinding>
    <binding name="WSHttpBinding_IDocImagingStatusService" 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="Message">
        <transport clientCredentialType="Windows" proxyCredentialType="None"
          realm="" />
        <message clientCredentialType="Windows" negotiateServiceCredential="true"
          algorithmSuite="Default" />
      </security>
    </binding>
  </wsHttpBinding>
</bindings>
<client>
  <endpoint address="http://localhost:8732/Design_Time_Addresses/DocImagingServices/DocImagingStatusService/"
  binding="wsHttpBinding" bindingConfiguration="WSHttpBinding_IDocImagingStatusService"
  contract="DocImagingService.IDocImagingStatusService" name="WSHttpBinding_IDocImagingStatusService">
    <identity>
      <dns value="localhost" />
    </identity>
  </endpoint>
</client>

1 个答案:

答案 0 :(得分:0)

以前,当我看到这种响应时间时,它应用于应用程序池设置。

有一个设置允许您在运行应用程序池时加载用户配置文件,此加载时间可能与您的20秒相匹配。

有关如何设置此值的屏幕转储,请参阅http://blogs.msdn.com/b/vijaysk/archive/2009/03/08/iis-7-tip-3-you-can-now-load-the-user-profile-of-the-application-pool-identity.aspx