У меня есть приложение Silverlight 3.0, которое использует сервис WCF для общения с базой данных, и когда у меня есть большой объем данных, возвращаемых из сервисных методов, я получаю Сервис Не Найденные ошибки. Я довольно уверен, что решение его состоит в том, чтобы просто обновить maxItemsInObjectGraph свойство, но я создаю сервисный клиент progrogrammatically и не могу найти, где установить это свойство. Вот то, что я делаю прямо сейчас:
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")));
Это определено не в binding, а в Service Behavior.
В Silveright значение maxItemsInObjectGraph по умолчанию равно int.MaxValue.
Вот статья о том, как изменить его для приложения .NET, но не Silverlight: Программная установка свойства MaxItemsInObjectGraph в клиенте
Фрагмент кода:
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;
}
Измените maxItemsInObjectGraph в своей службе WCF для каждой конечной точки, изменение ее в Silverlight означает, что клиент сможет поддерживать поведение, но служба должна его поддерживать. также.
После изменения его в своей службе, повторно сгенерируйте веб-службу прокси / обновления, и вы получите новый ServiceReference.config, который будет включать новое значение maxItemsInObjectGraph