2011-01-27 17 views
9

OYapılandırma dosyasını kullanmadan maxItemsInObjectGraph program aracılığıyla nasıl eklenir?

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

gibi bir EndpointAddress oluşturmak zorunda Ama programlı bu bitiş noktasına Davranışı eklemek olamazdı.

davranış ServiceBehavior Özniteliği'ne eklemek zorunda sunucuda .:

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

cevap

28

aşağıda verilmiştir: Ýstemcide

[ServiceBehavior(MaxItemsInObjectGraph = int.MaxValue)] 

Eğer son nokta uygulamak zorundayız. Bu örnekte size ChannelFactory tüm uç noktaları eklemek için nasıl görebilirsiniz: Sunucu Tarafında

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

sorunsuz çalıştı, teşekkürler –

+0

Güzel - dün kullandım . Teşekkürler – Liam

+0

Ancak, kendi DataOntrolSerializerOperationBehavior uygulamanızı uygularsanız, örneğin döngü referanslarını korumak için, yapıcıda MaxItemsInObjectGraph öğesini DataContractSerializer'a belirtmeniz gerekir. –

2

şunları da yapabilirsiniz:

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); 
} 
İlgili konular