문제

많은 양의 데이터를 전송하는 서비스를 다루고 있다고 가정 해 봅시다.

WCF로 이것을 구현하면 WCF가 각 요청이 제공하는 메모리의 양에 따라 서비스를 스로틀로 스로틀합니까? 아니면 서비스에 많은 히트 곡을받을 때마다 기억을 계속하지 않습니까?

나는 WCF 이외 의이 문제를 다루는 것에 대해 매우 궁금합니다. 나는 여전히 서비스 개발에 약간 새로운 것입니다 ...

도움이 되었습니까?

해결책

Andrew Hare와 같은 바인딩 속성과 ReaderQuotas를 사용하는 동안 대부분의 실제 용도에 대해 본질적으로 무제한 크기를 허용 할 수 있지만, 서비스가 어떻게 서비스를 받더라도 장기 실행 명령을 수락하면 타임 아웃과 같은 다른 문제가 발생할 것임을 명심하십시오. (WCF 사용 여부).

메시지의 크기에 관계없이 WCF 서비스는 성능이 침수되지 않도록 성능을 조절해야합니다. IIS에서 호스팅하거나 IIS로 호스팅하는 경우 서비스를 훨씬 더 "이용할 수있게 해줄 호스팅 환경에 추가 내장 기능이 있습니다. 그러나 동시성 문제에주의를 기울여야합니다. 다음 WCF 구성은 일부 조절 값을 설정하는 예를 제공합니다.

   <system.serviceModel>

    ...

     <behaviors>
       <serviceBehaviors>
         <behavior name="GenericServiceBehavior">
           <serviceTimeouts transactionTimeout="00:09:10"/>
           <serviceThrottling
             maxConcurrentCalls="20"
             maxConcurrentSessions="20"
             maxConcurrentInstances="20"
           />
         </behavior>
       </serviceBehaviors>
     </behaviors>
   </system.serviceModel>

다른 팁

WCF에는 특정 수의 바이트에 걸쳐 메시지를 거부하는 기본 페이로드 크기 제한이 있습니다. 이것은 구성 파일의 바인딩 섹션에서 구성 할 수 있습니다. 다음은 a가있는 조잡한 예입니다 basicHttpBinding 귀하가 사용할 수있는 많은 속성을 보여줍니다.

<bindings>
    <basicHttpBinding>
        <binding name="testBinding" maxReceivedMessageSize="2147483647">
            <readerQuotas
              maxDepth="2147483647"
              maxStringContentLength="2147483647"
              maxArrayLength="2147483647"
              maxBytesPerRead="2147483647"
              maxNameTableCharCount="2147483647" />
        </binding>
    </basicHttpBinding>

아이디어는 다양한 시나리오에 사용할 수있는 다양한 바인딩을 만들 수 있다는 것입니다. 서비스 소비 방법을 미세 조정하고 필요한 엔드 포인트의 메시지 크기 제한 만 증가시킬 수 있으므로 좋습니다.

nettcpbinding 또는 netnamedpipebinding을 사용하는 경우 MaxConnections 속성을 사용할 수 있습니다.

<bindings>
  <netTcpBinding>
    <binding name="myTCPBinding" maxConnections="15"/>
  </netTcpBinding>
</bindings>
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top