我有一個Silverlight 3控件使用的wcf服務。 Silverlight客戶端使用在運行時構建從控制的初始化參數這樣的basicHttpBindinging:silverlight 3:長時間運行wcf調用觸發器401.1(拒絕訪問)
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定義了10分鐘的closeTime,openTimeout,receiveTimeout和sendTimeOut。
如果我限制結果集的大小,調用就會結束。
從提琴手附加觀察: 當方法2被修改爲返回一個結果集更小(以及避免該問題),控制初始化包括4個電話:
- 服務1 /方法1 - 結果:401
- 服務1 /方法1 - 結果:401(此時報頭包括元件 「授權:協商TlRMTV ...」
- 服務1 /方法1 - 結果:200
- 服務1 /方法2 - 結果:200(1.25秒),
當方法2被配置成返回結果集較大,我們得到:
- 服務1 /方法1 - 結果:401
- 服務1 /方法1 - 結果:401(此時報頭包括元件「授權:協商TlRMTV ...」
- 服務1 /方法1 - 結果:200
- 服務1 /方法2 - 結果:401.1(7.5秒),
- 服務1 /方法2 - 結果:401.1(15毫秒)
- 服務1 /方法2 - 結果:401.1(7.5秒)
你在做的併發請求時打401?即在前一個呼叫仍在處理的同時撥打第二個電話?如果是這樣,這可能表示Wcf併發配置不正確。 – 2010-05-28 18:01:05
我不相信有併發請求。我添加了一些來自Fiddler觀察的帖子 – 2010-05-28 19:40:34
我發現如果我在1560個元素上限制記錄集,服務調用會正常返回。如果我在1561時限制記錄集,則服務調用失敗。這是一致的。此外,我正在做一個服務跟蹤,但結果幾乎不可讀.....將追求更好的跟蹤輸出。 – 2010-05-28 22:46:24