2013-03-13 2 views
0

내 서버에서 IIS 7.5에서 호스팅되는 WCF 서비스가 있습니다. 내 서비스에서 Entity Framework 5.0을 사용했습니다.WCF 성능 : WCF 서비스에 연결하는 데 오랜 시간이 걸림

서비스 참조를 추가하고 사이트에서 클라이언트를 생성하여 로컬 시스템에서 해당 서비스를 호출하면 응답을 받기까지 약 40 초가 소요됩니다. 나는 내 지역에있는 동일한 서비스를 호출하려고했는데 여기에 불과 3 ~ 4 초 걸린다.

<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" /> 

먼저 나는 그것이의 문제라고 생각 :

로컬 시스템에있는 사이트 서버에있는 서비스에 대한 참조를 추가 한 후, 바인딩 및 엔드 포인트 웹 설정에 추가 된 것 같습니다 엔티티 프레임 워크. 그런 다음 Entity Framework 프로파일 러를 사용하여 메소드의 실행 시간을 확인했습니다. 거의 1 초가 걸리지 않습니다.

또한 서비스를 호출 할 때 추가 할 헤더를 추가해야합니다.

그래서 40 초가 걸립니다. 그리고 느린 시동이나 처음으로 시간을 들여서는 안됩니다. 항상 많은 시간을 필요로합니다.

네트워크 속도가이 지연의 원인 일 수 있습니까? 그렇다면 어느 정도까지?

서비스 목록 목록을 반환합니다. 문제가 될 수 있습니다. 목록을 반환해서는 안됩니다. 대안은 무엇이 될 수 있습니까?

또한 Entity 프레임 워크는 요청이오고 데이터베이스 연결에 시간이 걸릴 때마다 DB에 연결합니다. 가능할 수 있습니까?

도와주세요. 감사

답변

1

처음에는 코드 첫 번째 접근 방식을 사용했습니다. 그리고 성능을 향상시키기 위해 처음으로 뷰를 생성하는 오버 헤드를 줄일 수 있도록 뷰를 미리 생성하려고했습니다. 그러나 나는 그 견해가 효과가 없다고 생각한다. 그래서 데이터베이스 우선 접근 방식으로 전환을 시도한 다음 뷰를 생성하고 원격 서버에 빌드를 업로드했습니다. 이제 시간은 40 초에서 10 초로 줄어 들었습니다. 또한 WCF 서비스 시작시 DB 연결을 열어 보았습니다. 그리고 다시 5 초로 줄였습니다.

0

난 그냥 정수 또는 문자열과 같은 몇 가지 간단한 값을 반환하는 간단한 서비스를 호스팅하고 응답 시간을 확인, 네트워크 대역폭에 문제가 있는지 확인하려면 단계

1)에 의한 문제의 단계를 분리 제안 .

2) 1 단계의 응답 시간이 크게 개선되면 데이터베이스 또는 목록 문제를 조사하십시오.

+0

안녕하세요, Deepansh, 답장을 보내 주셔서 감사합니다. 네트워크가 증가한 시간에 문제가 될 수 있지만, 가장 빠른 n/w로 서비스를 테스트 할 수있는 시간은 25 초입니다. 나는 문제가 EF에 있다는 것을 알았다. 답을 참조하십시오. – Deeps

0

문제가 자격 증명 협상이라고 의심됩니다. 이를 확인하는 쉬운 방법이 있습니다. 보안이없는 경우 동일한 서버에서 서비스를 실행하면됩니다 (허용되는 경우).

가능한 해결 방법 중 하나는 negotiateServiceCredential 속성을 false로 설정하여 SOAP 자격 증명 협상을 제거하는 것입니다. 도메인에서 Kerberos를 먼저 사용하도록 설정해야합니다.

+0

안녕하세요. 문제는 EF에있었습니다. 내 대답을 참조하십시오. 답변 감사합니다. – Deeps

관련 문제