wcf.net-3.5silverlight-3.0wcf-client

How can I set the maxItemsInObjectGraph property programmatically from a Silverlight Application?


I have a Silverlight 3.0 application that is using a WCF service to communicate with the database, and when I have large amounts of data being returned from the service methods I get Service Not Found errors. I am fairly confident that the solution to it is to simply update the maxItemsInObjectGraph property, but I am creating the service client progrogrammatically and cannot find where to set this property. Here is what I am doing right now:

BasicHttpBinding binding = new BasicHttpBinding(BasicHttpSecurityMode.None)
{
    MaxReceivedMessageSize = int.MaxValue,                  
    MaxBufferSize = int.MaxValue
};                        

MyService.MyServiceServiceClient client = new MyService.MyServiceProxyServiceClient(binding, new EndpointAddress(new Uri(Application.Current.Host.Source, "../MyService.svc")));

Solution

  • It's not defined in binding, but in Service Behavior.

    In Silveright, maxItemsInObjectGraph defaults to int.MaxValue.

    Here is an article on how to change it for .NET application, but not Silverlight: Programattically setting the MaxItemsInObjectGraph property in client

    A snippet of the code:

    protected ISecurityAdministrationService GetSecAdminClient()
    {
         ChannelFactory<ISecurityAdministrationService> factory = new    ChannelFactory<ISecurityAdministrationService>(wsSecAdminBinding, SecAdminEndpointAddress);
         foreach (OperationDescription op in factory.Endpoint.Contract.Operations)
         {
           DataContractSerializerOperationBehavior dataContractBehavior =op.Behaviors.Find<DataContractSerializerOperationBehavior>() as DataContractSerializerOperationBehavior;
           if (dataContractBehavior != null)
           {
                 dataContractBehavior.MaxItemsInObjectGraph = 2147483647;
           }
         }
        ISecurityAdministrationService client = factory.CreateChannel();
        return client;
    }