2014-06-20 2 views
0

바이트 배열을 서비스로 보내고 서비스에서 반환해야하는 WCF 서비스 응용 프로그램을 실행하고 있습니다. 413 "Request Too Large"오류가 발생합니다. 나는이 오류를 연구했고 바인딩 요소를 maxReceivedMessageSize를 포함하도록 변경하고, 설정 및 기타 변경 사항으로 바인딩 요소에 readerQuotes 요소를 추가하는 등 많은 반응이 있습니다. 그러나 내 web.config 바인딩 요소가 없습니다. 나는 그것을 클라이언트 측에서 변경했으나 아무런 차이가 없었다. 이 설정은 서버 측 (서비스 실행)이이 설정을 수행해야하는 위치에 있기 때문에 가능합니다. 나는 서버 측에서 변경 한 부분을 잃어 버렸다. 더 큰 바이트 배열을 보내고 받기 위해 어떤 설정을 놓치고 있습니까? 다음은 서버에서 사용중인 web.config입니다.413 요청 엔터티에 대해 WCF 서비스 응용 프로그램을 구성하는 방법 너무 큰 오류

<?xml version="1.0"?> 
<configuration> 

    <appSettings> 
    <add key="aspnet:UseTaskFriendlySynchronizationContext" value="true" /> 
    </appSettings> 
    <system.web> 
    <compilation debug="true" targetFramework="4.5" /> 
    <httpRuntime targetFramework="4.5"/> 
    </system.web> 
    <system.serviceModel> 
    <behaviors> 
     <serviceBehaviors> 
     <behavior> 
      <!-- To avoid disclosing metadata information, set the values below to false before deployment --> 
      <serviceMetadata httpGetEnabled="true" httpsGetEnabled="true"/> 
      <!-- To receive exception details in faults for debugging purposes, set the value below to true. Set to false before deployment to avoid disclosing exception information --> 
      <serviceDebug includeExceptionDetailInFaults="false"/> 
     </behavior> 
     </serviceBehaviors> 
    </behaviors> 
    <protocolMapping> 
     <add binding="basicHttpsBinding" scheme="https" /> 
    </protocolMapping>  
    <serviceHostingEnvironment aspNetCompatibilityEnabled="true" multipleSiteBindingsEnabled="true" /> 
    </system.serviceModel> 
    <system.webServer> 
    <modules runAllManagedModulesForAllRequests="true"/> 
    <!-- 
     To browse web app root directory during debugging, set the value below to true. 
     Set to false before deployment to avoid disclosing web app folder information. 
     --> 
    <directoryBrowse enabled="true"/> 
    </system.webServer> 

</configuration> 

답변

1

기본적으로 WCF 4.0부터는 (끝점 또는 바인딩이 명시 적으로 정의되지 않은) WCF는 기본 끝점을 basicHttpBinding으로 만듭니다. 이렇게하면 구성의 복잡성이 줄어들지 만 바인딩의 기본값을 얻을 수도 있습니다. 당신이 기본이 아닌 설정을 필요로 할 때이 문제를 해결하는 방법에는 두 가지가 있습니다 (서비스 측에서) 바인딩 :

<system.serviceModel> 
    <bindings> 
    <basicHttpBinding> 
     <binding closeTimeout="........... /> 
    </basicHttpBinding> 
    </bindings> 
:

첫째,이처럼 name 속성을 ommitting으로 구성 바인딩 기본을 추가 할 수 있습니다

또는, 당신은 당신의 바인딩 구성 이름을 지정하고 그 구성을 사용하는 명시 적으로 엔드 포인트 만들 수 있습니다

<system.serviceModel> 
    <services> 
    <service name=".....> 
     <endpoint address="" bindingConfiguration="MyBasicHttpBinding"..... /> 

두 번째 예는 당신이 당신의 바인딩에 "MyBasicHttpBinding"라는 이름의 바인딩 구성을 가지고 가정을 SECTIO 엔.

간결함을 위해 많은 구성을 생략했습니다. 자세한 내용이 필요한 경우 알려주십시오.

0

https://stackoverflow.com/a/884248/78551이 대답에 동의합니다. 서버 측에서도 비슷한 구성이 설정됩니다.

나는 한 번 엔티티 프레임 워크에서 거대한 데이터 세트를 되 찾으려하기 때문에이 문제가있었습니다. 제한이 있으며 이러한 종류의 작업은 얼마나 많은 데이터를 푸시 할 수 있는지에 영향을 미칩니다.

내 요청이 깨졌습니다. GetProducts, GetOrders, GetContracts 등. 클라이언트 측에서는 모두 함께 묶었습니다. 이 일을 용서하지 않지만 건축가가 거대한 데이터 세트를 처리해야만했습니다.

때때로 프레임 워크/플랫폼의 부과 된 한계를 벗어날 수 없습니다.

또한 net.tcp (올바르게 호출 한 경우)를 사용하여 소켓을 열고 데이터를 스트리밍하는 다른 프로토콜을 살펴 보았습니까?

+0

내 질문에 대한 서비스 구성 방법입니다. 내 데이터는 그리 크지 않으며 바이트 배열을 사용하는 것이 좋습니다. 난 그냥 제대로 구성되어 있지 않습니다. – user31673

+0

너는 그렇게 크지 않을 수도 있지만 전송을 위해 직렬화되는 모델은 xml 형식으로 수행되므로 패키지에 많은 양의 바이트가 추가됩니다. – Tacoman667

+0

사람들은 일을 잘 할 수있었습니다. 내 질문은 구성에 관한 것입니다. 나는 서버 측을 어떻게 구성 할 수 있는지 보지 못했다. 그것이 내가 놓친 것이다. – user31673