我已经创建了类似的端点地址
EndpointAddress address = new EndpointAddress("http://example.com/services/OrderService.svc");
但是我无法以编程方式将此行为添加到此端点。
行为如下:
<behaviors>
<endpointBehaviors>
<behavior name="NewBehavior">
<dataContractSerializer maxItemsInObjectGraph="6553600" />
</behavior>
</endpointBehaviors>
</behaviors>
答案 0 :(得分:28)
在服务器上,您必须将其添加到ServiceBehavior属性中:
[ServiceBehavior(MaxItemsInObjectGraph = int.MaxValue)]
在客户端上,您必须将其应用于端点。在此示例中,您可以看到如何将其添加到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 :(得分:2)
在服务器端,您还可以:
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);
}
答案 2 :(得分:0)
替代方案:((ServiceBehaviorAttribute) host.Description.Behaviors[typeof(ServiceBehaviorAttribute)]).MaxItemsInObjectGraph = int.MaxValue;