我有一个Silverlight 3控件消耗的wcf服务。 Silverlight客户端使用basicHttpBindinging,它是在运行时根据控件的初始化参数构造的,如下所示:
public static T GetServiceClient<T>(string serviceURL)
{
BasicHttpBinding binding = new BasicHttpBinding(Application.Current.Host.Source.Scheme.Equals("https", StringComparison.InvariantCultureIgnoreCase)
? BasicHttpSecurityMode.Transport : BasicHttpSecurityMode.None);
binding.MaxReceivedMessageSize = int.MaxValue;
binding.MaxBufferSize = int.MaxValue;
binding.Security.Mode = BasicHttpSecurityMode.TransportCredentialOnly;
return (T)Activator.CreateInstance(typeof(T), new object[] { binding, new EndpointAddress(serviceURL)});
}
该服务实现了Windows安全性。调用按预期返回,直到结果集增加到几千行,此时收到HTTP 401.1错误。
服务的HttpBinding将closeTime,openTimeout,receiveTimeout和sendTimeOut定义为10分钟。
如果我限制结果集的大小,则调用会超过。
Fiddler的补充意见: 当修改Method2以返回较小的结果集(并避免问题)时,控制初始化包含4个调用:
当Method2配置为返回更大的结果集时,我们得到:
答案 0 :(得分:1)
问题是服务行为的配置。这就是诀窍:
<behavior name="SRMS.Services.GraphicPointServiceBehavior">
<serviceMetadata httpGetEnabled="true"/>
<serviceDebug includeExceptionDetailInFaults="true"/>
<dataContractSerializer maxItemsInObjectGraph="2147483647"/>
请参阅Daniel Bergsten的帖子:more information