silverlight 3: длительные триггеры вызова wcf 401.1 (доступ запрещен) - PullRequest
1 голос
/ 28 мая 2010

У меня есть сервис 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 / Метод1 - результат: 401
  2. Сервис1 / Метод1 - результат: 401 (этот заголовок времени включает элемент «Авторизация: согласование TlRMTV ...»
  3. Сервис1 / Метод1 - результат: 200
  4. Сервис1 / Метод2 - результат: 200 (1,25 секунды)

Когда Method2 настроен на возврат большего набора результатов, мы получаем:

  1. Сервис1 / Метод1 - результат: 401
  2. Service1 / Method1 - результат: 401 (в этот раз заголовок содержит элемент «Authorization: Negotiate TlRMTV ...»
  3. Сервис1 / Метод1 - результат: 200
  4. Сервис1 / Метод2 - результат: 401,1 (7,5 секунд)
  5. Сервис1 / Метод2 - результат: 401,1 (15 мс)
  6. Сервис1 / Метод2 - результат: 401,1 (7,5 секунд)

1 Ответ

1 голос
/ 29 мая 2010

Проблема заключалась в настройке поведения службы. Это сделало трюк:

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

Смотрите пост Даниэля Бергстена здесь: больше информации

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...