1

我有一个由 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 错误。

Service 的 HttpBinding 定义了 10 分钟的 closeTime、openTimeout、receiveTimeout 和 sendTimeOut。

如果我限制结果集的大小,则调用成功。

来自 Fiddler 的其他观察:当修改 Method2 以返回较小的结果集(并避免该问题)时,控件初始化由 4 个调用组成:

  1. 服务 1/方法 1——结果:401
  2. Service1/Method1 -- 结果:401(这次标头包括元素“授权:协商 TlRMTV...”
  3. 服务 1/方法 1——结果:200
  4. Service1/Method2 -- 结果:200(1.25 秒)

当 Method2 配置为返回更大的结果集时,我们得到:

  1. 服务 1/方法 1——结果:401
  2. Service1/Method1 -- 结果:401(这次标头包括元素“Authorization:Negotiate TlRMTV...”
  3. 服务 1/方法 1——结果:200
  4. Service1/Method2 -- 结果:401.1(7.5 秒)
  5. Service1/Method2 -- 结果:401.1 (15ms)
  6. Service1/Method2 -- 结果:401.1(7.5 秒)
4

1 回答 1

1

问题是服务行为的配置。这成功了:

<behavior name="SRMS.Services.GraphicPointServiceBehavior">
    <serviceMetadata httpGetEnabled="true"/>
 <serviceDebug includeExceptionDetailInFaults="true"/>
<dataContractSerializer maxItemsInObjectGraph="2147483647"/>

在此处查看 Daniel Bergsten 的帖子:更多信息

于 2010-05-28T23:13:18.500 回答