我有一个使用WCF服务与数据库通信的Silverlight 3.0应用程序,当我从服务方法返回大量数据时,我得到Service Not Found错误。我相信它的解决方案是简单地更新maxItemsInObjectGraph属性,但我以编程方式创建服务客户端,无法找到设置此属性的位置。这就是我现在正在做的事情:
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")));
答案 0 :(得分:28)
它没有在绑定中定义,而是在服务行为中定义。
在Silveright中,maxItemsInObjectGraph默认为int.MaxValue。
这是一篇关于如何为.NET应用程序更改它的文章,但不是Silverlight:Programattically setting the MaxItemsInObjectGraph property in client
代码片段:
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;
}
答案 1 :(得分:3)
以下是我在继承自
的客户端对象中使用的函数System.ServiceModel.ClientBase(Of IServiceName)
该方法的目的是以编程方式为每个操作设置MaxItemsInObjectGraph值。这让我有了更复杂的结构。
Private Sub IncreaseObjectCount()
For Each op As System.ServiceModel.Description.OperationDescription In Me.Endpoint.Contract.Operations
For Each dscob As System.ServiceModel.Description.DataContractSerializerOperationBehavior In op.Behaviors.FindAll(Of System.ServiceModel.Description.DataContractSerializerOperationBehavior)()
dcsob.MaxItemsInObjectGraph = Integer.MaxValue
Next dcsob
Next op
End Sub
我通常在对象的构造函数中调用它。
答案 2 :(得分:1)
为每个端点更改WCF服务中的maxItemsInObjectGraph,在Silverlight中更改它意味着客户端将能够支持该行为,但服务也必须支持它。
在您的服务中更改它后,重新生成代理/更新Web服务,您将获得一个新的ServiceReference.config,它将包含新的maxItemsInObjectGraph值