2011-01-27 12 views
9

mam stworzyć EndpointAddress jak tenJak programowo zainstalować maxItemsInObjectGraph bez użycia pliku konfiguracyjnego?

EndpointAddress address = new EndpointAddress("http://example.com/services/OrderService.svc"); 

Ale nie mogłem dodać zachowanie do tego punktu końcowego programowo.

Zachowanie podano poniżej .:

<behaviors> 
    <endpointBehaviors> 
    <behavior name="NewBehavior"> 
     <dataContractSerializer maxItemsInObjectGraph="6553600" /> 
    </behavior> 
    </endpointBehaviors> 
</behaviors> 

Odpowiedz

28

Na serwerze trzeba dodać w atrybucie ServiceBehavior:

[ServiceBehavior(MaxItemsInObjectGraph = int.MaxValue)] 

Na kliencie trzeba zastosować go do punktu końcowego. W tym przykładzie widać, jak dodać go do wszystkich punktów końcowych w swojej ChannelFactory:

var factory = new ChannelFactory<IInterface>(...); 
foreach (OperationDescription op in factory.Endpoint.Contract.Operations) 
    { 
     var dataContractBehavior = op.Behaviors.Find<DataContractSerializerOperationBehavior>(); 
     if (dataContractBehavior != null) 
     { 
      dataContractBehavior.MaxItemsInObjectGraph = int.MaxValue; 
     } 
    } 
+1

to działało bez zarzutu, dzięki –

+0

Nicea - użył go wczoraj . Dzięki – Liam

+0

Należy pamiętać, że jeśli implementujesz własne narzędzie DataOntrolSerializerOperationBehavior, na przykład w celu zachowania odniesień do cykli, musisz określić MaxItemsInObjectGraph w konstruktorze na DataContractSerializer. –

2

Na Server Side, można również:

ServiceHost host = new ServiceHost(); 
ServiceBehaviorAttribute sba = host .Description.Behaviors.Find<ServiceBehaviorAttribute>(); 
      if (sba == null) 
      { 
       sba = new ServiceBehaviorAttribute(); 
       sba.MaxItemsInObjectGraph = int.MaxValue; 
       host.Description.Behaviors.Add(sba); 
} 
Powiązane problemy