2011-02-24 2 views
1

메시지 보안 및 windows 자격 증명 유형을 사용하고 있습니다. 나는 스트리밍과 Mtom을 지금 당장 사용하고 있지는 않지만 앞으로 고려할 것입니다. 지금까지 WCF 서비스 설명서에서는 최대 2GB의 데이터를 전송할 수 있다고 명시했습니다. 나는 WCF 사양에 따라 20-40 MB의 데이터를 전송할 수 있다면 지금 생각보다 나쁘지만 지금은 나에게 도움이 될 것입니다.WCF의 10-40MB 데이터 전송

최대 10MB의 데이터를 WCF 서비스에서 클라이언트로 전송할 수 있지만 10MB를 초과하면 서버에서 클라이언트로 데이터를 전송하지 못하게되고 무엇이 있는지 잘 모릅니다.
웹 서비스에서 클라이언트로 개체 컬렉션을 전송하려고합니다. 데이터가 서버에서 클라이언트로 전송되지 않으면 오류 메시지가 표시되지 않습니다. 매우 이상합니다. 클라이언트 및 서버 바인딩 속성에서 전송 크기를 10MB로 설정하면 1650 개체의 컬렉션을 전송할 수 있지만 1900 년경에는 클라이언트에서 아무 것도 얻지 못합니다. 왜 ????

그냥 작동하도록 설정하려면 모든 속성을 최대로 설정하고 여전히 작동하지 않도록 설정하십시오. 아래 내가 클라이언트에있는 것입니다 :

<ws2007HttpBinding> 
     <binding name="KerberosBinding" maxBufferPoolSize="0" maxReceivedMessageSize="2147483647" 
       messageEncoding="Text" sendTimeout="00:10:00" closeTimeout="00:10:00" 
      openTimeout="00:10:00"> 
     <readerQuotas maxStringContentLength="2147483647" maxArrayLength="2147483647" 
         maxBytesPerRead="4096" /> 
     <security> 
      <message negotiateServiceCredential="true" establishSecurityContext="true"/> 
     </security> 
     </binding></ws2007HttpBinding> 

나는 누군가가 답을 가지고 희망 :

다음
<ws2007HttpBinding> 
     <binding name="CustomizeWs2007HttpBinding" sendTimeout="00:10:00" closeTimeout="00:10:00" 
      openTimeout="00:10:00" messageEncoding="Text" receiveTimeout="00:10:00" 
      maxBufferPoolSize="0" 
      maxReceivedMessageSize="2147483647" 
      > 
      <readerQuotas maxStringContentLength="2147483647" maxArrayLength="2147483647" 
         maxBytesPerRead="4096" /> 
      <security mode="Message"> 
      <message clientCredentialType="Windows" negotiateServiceCredential="true" establishSecurityContext="true"/> 
      </security> 
     </binding></ws2007HttpBinding> 

내가 WCF 서비스에 (서버)가 것입니다. 미리 감사드립니다.

Chris 님, 지금 협조 해 주셔서 감사 드리며 다른 모든 분들께 감사드립니다. 나는이 사이트의 새로운 회원이므로 어쨌든 아래에 붙여 넣은 나의 최종 솔루션을 어디에 둘 것인지 모르겠다.

15728640 = 15메가바이트
10485760 = 10메가바이트의 너무 큰

클라이언트 구성하지만 :

<behaviors> 
    <endpointBehaviors> 
    <behavior name="PServiceBehavior"> 
     <dataContractSerializer maxItemsInObjectGraph="10485760"/> 
    </behavior> 
    </endpointBehaviors> 
</behaviors> 

및 엔드 포인트에서이를 참조 :

<endpoint address="http://localhost:53054/pservicehost/pservice.svc" 

바인딩 = "ws2007HttpBinding"bindingConfiguration = "PServiceWs2007HttpBinding"behaviorConfiguration = "PServiceBehavior" 계약 = "PW ebServiceContract.IPService "이름 ="PServiceWs2007HttpBindingEndPoint ">

서비스 구성 :

<behaviors> 
    <serviceBehaviors> 
    <behavior name="PServiceHost.PServiceBehavior"> 
    <serviceMetadata httpGetEnabled="true" /> 
    <serviceDebug includeExceptionDetailInFaults="true" /> 
    <dataContractSerializer maxItemsInObjectGraph="10485760"/> 
    </behavior> 
    </serviceBehaviors> 
</behaviors> 

과 서비스에서이를 참조 :

<services> 
    <service behaviorConfiguration="PServiceHost.PServiceBehavior" name="PWebService.PService"> 
    <endpoint address="" binding="ws2007HttpBinding" bindingConfiguration="KerberosBinding" contract="PWebServiceContract.IPService"> 
    <identity> 
     <dns value="localhost" /> 
    </identity> 
    </endpoint> 
    <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" /> 
    </service> 
    </services> 
+0

나는 즉시 오류가 표시되지 않습니다,하지만 난 정기적으로 WCF (거대한 PDF 파일)에서 메시지 당 100 + MB를 전송할 수 있습니다. –

+0

스트리밍을 사용하고있는 것처럼 들리십니까? – user633176

답변

2

아마이 스로틀 함께 할 수있는 뭔가가 설정 :

<dataContractSerializer maxItemsInObjectGraph="..."/> 
+0

당신은 절대 그것을 못 박았습니다. – user633176

1

서버에서 WCF 추적을 설정하는 것이 좋습니다. 이것은 매우 유용한 도구입니다. 과거에는 특히 많은 도움이되었습니다. 특히 서버 측에 묻힌 예외가 있으면 다른 곳에서는 쉽게 감지 할 수 없습니다.여기

그것을 설정하는 방법에 대해 설명 링크입니다 : Service Trace Viewer Tool (SvcTraceViewer.exe)