У меня есть сервис wcf, потребляемый элементом управления silverlight 3. Клиент 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 вызовов:
- Сервис1 / Метод1 - результат: 401
- Сервис1 / Метод1 - результат: 401 (этот заголовок времени включает элемент «Авторизация: согласование TlRMTV ...»
- Сервис1 / Метод1 - результат: 200
- Сервис1 / Метод2 - результат: 200 (1,25 секунды)
Когда Method2 настроен на возврат большего набора результатов, мы получаем:
- Сервис1 / Метод1 - результат: 401
- Service1 / Method1 - результат: 401 (в этот раз заголовок содержит элемент «Authorization: Negotiate TlRMTV ...»
- Сервис1 / Метод1 - результат: 200
- Сервис1 / Метод2 - результат: 401,1 (7,5 секунд)
- Сервис1 / Метод2 - результат: 401,1 (15 мс)
- Сервис1 / Метод2 - результат: 401,1 (7,5 секунд)