2011-04-19 5 views
2

DataServiceContext을 사용하여 dbml을 호스팅하는 wcf 서비스에서 데이터를 가져옵니다. 그것은 일반적으로 잘 작동하지만, 많은 양의 데이터 (예를 들어, 바이너리 파일)를 반환하는 쿼리는 일반적인 WCF 오류 생성 :DataServiceContext에서 최대 메시지 크기 변경

The maximum message size quota for incoming messages (65536) has been exceeded. To increase the quota, use the MaxReceivedMessageSize property on the appropriate binding 

문제는 내가 채널의 메시지 크기를 변경하는 방법을 찾을 수 없습니다입니다.

여기에 내가 클래스를 초기화하는 데 사용하는 코드는 다음과 같습니다 RPDataModelDataContext가 entityframework으로 생성 된 클라이언트 프록시 클래스가

var channel = new RPDataModelDataContext(DataServiceBaseAddress); 
channel.Credentials = CredentialCache.DefaultCredentials; 

public partial class RPDataModelDataContext : 
    global::System.Data.Services.Client.DataServiceContext 
{ 
    // ... 

사람이 올바른 방향으로 날 지점 수 있습니까?

답변

0

일부 연구를 통해 데이터 채널 서비스 클라이언트를 사용자 정의 할 수있는 방법이 없습니다. 그래서 그럴 수 없다고 생각합니다.

정상적인 wcf 클라이언트를 만들어야 상호 작용할 수 있습니다.

0

편집 : 이것은 실제로 서비스 측면의 문제 일 수 있습니다. 서비스 구성 파일이 표시된 것처럼 the answer with most votes.으로 설정해야합니다. 기본적으로 MaxReceivedMessageSize 값을 예상되는 최대 쿼리 결과 크기보다 약간 큰 값으로 변경해야합니다. 나는 아무 문제없이 2 MB만큼 높게 설정해야했습니다.

1

저는이 문제에도 많은 문제가있었습니다. 제가 누락 한 세 가지 세부 사항이있었습니다.

  1. 정확히 name 서비스를 지정해야합니다. 이것은 완전한 서비스 이름이어야합니다. 당신은 엔드 포인트의 정확한 address를 제공해야합니다
  2. (예. Namespace.ClassName).

    <services> 
        <!-- The service name below has to be the EXACT Namespace.ClassName of your WCF Data Service--> 
        <service name="YourDomainNameHere.YourClassNameHere"> 
         <!-- The address below must be the EXACT address of your service--> 
         <endpoint address ="http://localhost:19766/YourServiceName.svc" binding="webHttpBinding" bindingConfiguration="higherMessageSize" contract ="System.Data.Services.IRequestHandler"> 
         </endpoint> 
        </service> 
    </services> 
    
  3. maxReceivedMessageSizemaxBufferSize가 모두 지정해야합니다 (아래 코드 참조)

    <bindings> 
        <webHttpBinding> 
         <!-- The maxReceivedMessageSize and the maxBufferSize must both be specified as shown below--> 
         <binding name="higherMessageSize" maxReceivedMessageSize ="2048000" maxBufferSize="2048000"/> 
        </webHttpBinding> 
    </bindings>