2010-06-17 8 views
7

Mam problemy z określaniem obiektu dataContractSerializer maxItemsInObjectGraph w pliku web.config hosta.Dane usługi WCFContractSerializer maxItemsInObjectGraph in 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> 

Powyższe nie ma wpływu na pobieranie danych. Serwer przekroczył limit czasu z powodu dużej ilości danych.

mogę jednak określić maksymalną granicę w kodzie i że działa

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

Czy ktoś wie dlaczego nie mogę zrobić tę pracę poprzez ustawienie web.config? Chciałbym zachować w web.config, aby łatwiej było w przyszłości aktualizować.

+0

Mam również ten problem. Zastanawiam się, dlaczego nikt nie odpowiedział? Dzięki za podpowiedź, że mogę ustawić "ServiceBehavior" w kodzie, może przynajmniej zachęcić mnie do działania. – jocull

+0

Wiesz, że maxItemsInObjectGraph definiuje tylko całkowitą liczbę dozwolonych elementów w odpowiedzi, a nie całkowity rozmiar odpowiedzi, tak? (Myślę, że jeśli nie jest określony, domyślnie jest to 60k xml elementów) –

+0

Dave, czy twoje pytanie było odpowiedzią, czy nie? Jeśli podana odpowiedź rozwiązała Twój problem, oznacz go jako "tak". – Bardia

Odpowiedz

12

W sekcji behawioralnej, dodać zachowanie końcowego z DataContractSerializer, tak:

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

Następnie zmodyfikować końcowy używać tego zachowania tak:

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

To powinno rozwiązać problem .

+1

jak urok. Dzięki – SergioM

+1

Dziś napotkałem podobny problem. Wcf rzucił wyjątki dotyczące przekroczenia maxItemsInObjectGraph, mimo że był tam w zachowaniu punktu końcowego. następnie przeniosłem to do zachowania usługi, które rozwiązało problem.http: //stackoverflow.com/questions/26610861/passing-comma-separated-tring-value-to-a-wcf-rest-service/26613810#26613810 – user1131926

Powiązane problemy