繁体   English   中英

为WCF服务客户端增加MaxItemsInObjectGraph

[英]Increase MaxItemsInObjectGraph for WCF Service client

我正在引用来自C#dll的WCF服务,因此生成的app.config文件未被读取。 我手动尝试通过以下代码创建服务客户端; 但是,我得到的错误是我需要增加MaxItemsInObjectGraph。 正在运行的服务已经设置为int.MaxValue所以我现在只需要在TestServiceClient中增加它。 有任何想法吗?? 提前致谢!

var client = new TestServiceClient(GetBinding(), GetEndpointAddress());

private static EndpointAddress GetEndpointAddress()
        {
            var endpoint = new EndpointAddress("https://localhost:8000/ServiceModel/service");

            return endpoint;
        }

        private static Binding GetBinding()
        {
            var basicHttpBinding = new BasicHttpBinding(BasicHttpSecurityMode.Transport)
            {
                MessageEncoding = WSMessageEncoding.Text,
                TextEncoding = Encoding.UTF8,
                BypassProxyOnLocal = false,
                UseDefaultWebProxy = true,
                CloseTimeout = new TimeSpan(10, 0, 0),
                OpenTimeout = new TimeSpan(10, 0, 0),
                SendTimeout = new TimeSpan(10, 0, 0),
                ReceiveTimeout = new TimeSpan(10, 0, 0),
                HostNameComparisonMode = HostNameComparisonMode.StrongWildcard,
                MaxBufferPoolSize = Int32.MaxValue,
                MaxReceivedMessageSize = Int32.MaxValue,
                AllowCookies = false,
                TransferMode = TransferMode.StreamedResponse,
                ReaderQuotas =
                {
                    MaxDepth = 32,
                    MaxStringContentLength = Int32.MaxValue,
                    MaxArrayLength = 6553600,
                    MaxBytesPerRead = 4096,
                    MaxNameTableCharCount = 16384
                }
            };

            return basicHttpBinding;
        }

以下是我的解决方案:

private static ITestServiceClient GetClient()
        {
            var factory = new ChannelFactory<ITestServiceClient >(GetBinding(), GetEndpointAddress());

            foreach (var dataContractBehavior in factory.Endpoint.Contract.Operations
                .Select(operation => operation.Behaviors.Find<DataContractSerializerOperationBehavior>())
                .Where(dataContractBehavior => dataContractBehavior != null))
            {
                dataContractBehavior.MaxItemsInObjectGraph = Int32.MaxValue;
            }

            var client = factory.CreateChannel();

            return client;
        }

尝试在client.Endpoint.Contract.Operations中

foreach (var operation in operations)
{
   var dataContractBehavior = operation.Behaviors.Find<DataContractSerializerOperationBehavior>();
   if (dataContractBehavior != null)
   {
      dataContractBehavior.MaxItemsInObjectGraph = value;
   }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM