2010-12-07 7 views
1

모든 종류의 메시지를 보내는 데 WCF를 사용하고 Perticular에서이 메시지는 약 3200000 바이트와 일부 문자열 및 헤더를 더한 것입니다. 큰 paylode는 내가 모든면에서 모방하려고했던 whos 구성을 다른 서비스를 통해 호스트에서 가져온 직렬화 된 객체입니다.WCF를 통해 큰 메시지를 보낼 수 없습니다.

성능을 위해 netTcp 바인딩을 사용하고 우리는 많은 콜백을 사용하고 있습니다. 나는 클라이언트와 서버 측 모두에서 최대 레벨까지 찾을 수있는 모든 옵션을 설정했다.

<system.serviceModel> 
    <bindings> 
     <netTcpBinding> 
     <binding name="NetTcpBinding_IEventMissionService" closeTimeout="00:01:00" openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:01:00" transactionFlow="false" transferMode="Buffered" transactionProtocol="OleTransactions" hostNameComparisonMode="StrongWildcard" listenBacklog="10" maxBufferPoolSize="2147483647" maxBufferSize="2147483647" maxConnections="10" maxReceivedMessageSize="2147483647"> 
     <readerQuotas maxDepth="32" maxStringContentLength="2147483647" maxArrayLength="2147483647" maxBytesPerRead="4096" maxNameTableCharCount="2147483647" /> 
     <reliableSession ordered="true" inactivityTimeout="00:10:00" enabled="false" /> 
     <security mode="None" /> 
    </binding> 
    </bindings> 
    <client> 
     <endpoint address="net.tcp://localhost:7359/EventMissionMap" binding="netTcpBinding" bindingConfiguration="NetTcpBinding_IEventMissionService" contract="RXEventMissionMapService.IEventMissionService" name="NetTcpBinding_IEventMissionService" /> 
     </client> 
    </system.serviceModel> 

나는 클라이언트에서이 아닌 Descript, 이하 오류 메시지가 :

소켓 연결이 중단되었습니다. 메시지를 처리하는 중에 오류가 발생하거나 원격 호스트에서 제한 시간을 초과하거나 내부 네트워크 리소스 문제가 발생합니다. 로컬 소켓 시간 초과 은 '00 : 00 : 59.9979996 '입니다.

내측 exteption : 기존 연결 강제 트레이스를 실행하는 원격 호스트

의해 폐쇄 된

은 (스택 트레이스 맨)가 좀 더 정보를 제공 :

System.ServiceModel.Channels.SocketConnection.Write (Byte [] System.Net.Sockets.Socket.Send (바이트 [] 버퍼 INT32 오프셋, INT32 크기 SocketFlags의 socketFlags : 17,451,515,버퍼, INT32는 INT32 크기 부울 즉각 시간 범위의 초과) 스택 탑 내부 exteption 미량 오프셋

System.Net.Sockets.Socket.Send (바이트 [] 버퍼 오프셋 INT32, INT32 크기 socketFlags socketFlags)

,691 :) 스택

위쪽 내부 예외 추적

페이로드를 null로 설정하면 (3.2MB 객체를 보내지 않음) 메시지는 아무런 소란없이 진행됩니다.

개체가 다른 서비스에서 비롯된다는 사실이 내 문제와 관련이 있습니까? 내 눈에 문제는 메시지의 크기이지만 구성의 옵션을 늘리면 지금까지 도움이되지 못했습니다.

행운을 빌어 클라이언트를 설정하려고했습니다. 요청/응답으로 전환하거나 모든 콜백을 제거하는 데 스트리밍 결과 사용 ...

아이디어가 있으십니까?

+1

1) maxReceivedMessageSize 및 readerQuota 게시 2) 페이로드는 어떻게 진행됩니까? 바이트 배열? – Aliostad

+1

1) maxReceivedMessageSize는 어디에 있습니까? 독자 queotas는 이미 게시됩니다!? 2) 페이로드가 바이트 [] –

+0

보내기 시간 제한을 늘리십시오. – DarrellNorton

답변

0

내가 잘못했습니다! 호스트 측의 구성 단계에서 변경 한 사항은 전혀 다른 서비스였습니다. 버퍼 크기와 메시지 크기를 최대화하는 것이 트릭을 만들었습니다! 실제로 작동하게 만든 것은 어느 것이 확실하지 않습니다.MaxBufferSize, MaxReceivedMessageSize, ReaderQuotas-> MaxArrayLength 및 호스트와 클라이언트 측의 설정 모두에 대해 비슷한 문제가있는 모든 사용자에게만 권장 할 수 있습니다. 또한 호스트 측의 서비스 비헤이비어에서 maxItemsInObjectGraph를 최대화합니다.

관련 문제