2010-06-17 21 views
7

Tôi gặp sự cố khi chỉ định dataContractSerializer maxItemsInObjectGraph trong web.config của máy chủ lưu trữ.Dữ liệu dịch vụ WCFContractSerializer maxItemsInObjectGraph trong web.config

<behaviors> 
    <serviceBehaviors> 
    <behavior name="beSetting"> 
     <serviceMetadata httpGetEnabled="True"/> 
     <serviceDebug includeExceptionDetailInFaults="True" /> 
     <dataContractSerializer maxItemsInObjectGraph="2147483646"/> 
    </behavior> 
    </serviceBehaviors> 
</behaviors> 
<services> 
    <service name="MyNamespace.MyService" 
      behaviorConfiguration="beSetting" > 
    <endpoint address="http://localhost/myservice/" 
       binding="webHttpBinding" 
       bindingConfiguration="webHttpBinding1" 
       contract="MyNamespace.IMyService" 
       bindingNamespace="MyNamespace"> 
    </endpoint> 
    </service> 
</services> 

Điều trên không ảnh hưởng đến việc kéo dữ liệu của tôi. Máy chủ hết thời gian chờ vì khối lượng dữ liệu lớn.

Tôi tuy nhiên có thể xác định giới hạn tối đa trong mã và làm việc

[ServiceBehavior(MaxItemsInObjectGraph=2147483646, IncludeExceptionDetailInFaults = true)] 
    public abstract class MyService : MyService 
    { 
    blah... 
} 

Có ai biết tại sao tôi không thể làm công việc này thông qua một thiết lập web.config? Tôi muốn giữ trong web.config để nó dễ dàng hơn cho các bản cập nhật trong tương lai.

+0

Tôi cũng gặp sự cố này. Tôi tự hỏi tại sao không ai khác trả lời? Cảm ơn bạn đã tip về việc có thể thiết lập 'ServiceBehavior' trong mã, ít nhất nó có thể khiến tôi di chuyển. – jocull

+0

Bạn biết rằng maxItemsInObjectGraph chỉ xác định tổng số phần tử được phép trong phản hồi chứ không phải kích thước phản hồi hoàn toàn đúng không? (tôi nghĩ rằng nếu nó không được chỉ định nó mặc định là 60k xml elements) –

+0

Dave, câu hỏi của bạn có được trả lời hay không? Nếu câu trả lời đã cho giải quyết được vấn đề của bạn, hãy đánh dấu nó như vậy. – Bardia

Trả lời

12

Trong phần hành vi của bạn, thêm một hành vi đầu cuối với DataContractSerializer, như vậy:

<endpointBehaviors> 
    <behavior name="LargeQuotaBehavior"> 
    <dataContractSerializer maxItemsInObjectGraph="2147483646"/> 
    </behavior> 
</endpointBehaviors> 

Sau đó, thay đổi thiết bị đầu cuối của bạn để sử dụng hành vi này như sau:

<endpoint address="http://localhost/myservice/" 
      binding="webHttpBinding" 
      bindingConfiguration="webHttpBinding1" 
      contract="MyNamespace.IMyService" 
      bindingNamespace="MyNamespace" 
      behaviorConfiguration="LargeQuotaBehavior"> 

này nên giải quyết vấn đề của bạn .

+1

như một sự quyến rũ. Cảm ơn – SergioM

+1

Tôi đã gặp sự cố tương tự ngày hôm nay. Wcf đã ném ngoại lệ về maxItemsInObjectGraph vượt quá mặc dù nó đã có trong hành vi điểm cuối. sau đó tôi đã chuyển dịch vụ đó đến hành vi Dịch vụ đã giải quyết vấn đề.http: //stackoverflow.com/questions/26610861/passing-comma-separated-string-value-to-a-wcf-rest-service/26613810#26613810 – user1131926

Các vấn đề liên quan