Исключение тайм-аута WCF детализировало расследование

полный пример:

import boto3

def lambda_handler(event, context):

    client = boto3.client('dynamodb')

    for record in event['Records']:
        # your logic here...
        try:
            client.update_item(TableName='dynamo_table_name', Key={'hash_key':{'N':'value'}}, AttributeUpdates={"some_key":{"Action":"PUT","Value":{"N":'value'}}}) 
        except Exception, e:
            print (e)

обратите внимание, что вам нужно решить, когда использовать «update_item» или «put_item».

с помощью update_item вы гарантируете наличие только одной записи с одинаковым хешем / диапазоном. если запись существует, она может обновить эту запись, иначе она создаст ее

http://boto3.readthedocs.org/en/latest/reference/services/dynamodb.html#DynamoDB.Client. update_item

94
задан Kent Boogaart 16 June 2010 в 12:54
поделиться

8 ответов

Если вы используете клиент .Net, то, возможно, вы не установили

//This says how many outgoing connection you can make to a single endpoint. Default Value is 2
System.Net.ServicePointManager.DefaultConnectionLimit = 200;

, вот исходный вопрос и ответ Регулирование службы WCF

Обновление :

Эта конфигурация входит в .Net клиентское приложение может быть запущено или когда угодно, но перед запуском ваших тестов.

Кроме того, вы можете иметь его в файле app.config, например,

<system.net>
    <connectionManagement>
      <add maxconnection = "200" address ="*" />
    </connectionManagement>
  </system.net>
50
ответ дан 24 November 2019 в 06:09
поделиться

от: http://www.codeproject.com/KB/WCF/WCF_Operation_Timeout_.aspx

Чтобы избежать этой ошибки тайм-аута, нам нужно для настройте OperationTimeout свойство для прокси в клиенте WCF код. Эта конфигурация что-то новый в отличие от других конфигураций такие как время ожидания отправки, время ожидания получения и т. д., который я обсуждал в начале статья. Чтобы установить время ожидания этой операции конфигурация собственности, мы должны бросаем наш прокси в IContextChannel в Клиентское приложение WCF перед вызовом методы контракта операции.

2
ответ дан 24 November 2019 в 06:09
поделиться

Вы пытались использовать clientVia , чтобы увидеть отправленное сообщение, используя набор инструментов SOAP или что-то подобное? Это может помочь увидеть, исходит ли ошибка от самого клиента или откуда-то еще.

0
ответ дан 24 November 2019 в 06:09
поделиться

Если вы еще не пробовали - инкапсулируйте свои серверные операции WCF в блоки try / finally и добавьте журналирование, чтобы убедиться, что они действительно возвращаются.

Если они показывают, что Операции завершаются, то моим следующим шагом будет перейти на более низкий уровень и посмотреть на реальный транспортный уровень.

На этом этапе может оказаться весьма полезным Wireshark или другой аналогичный инструмент для захвата пакетов. Я предполагаю, что это работает через HTTP на стандартном порту 80.

Запустите Wireshark на клиенте. В параметрах при запуске захвата установите фильтр захвата на tcp http и host service.example.com - это уменьшит количество нерелевантного трафика.

Если можете, измените своего клиента, чтобы он уведомлял вас о точном времени начала вызова и времени, когда истекло время ожидания. Или просто внимательно следите за ним.

Когда вы получаете сообщение об ошибке, вы можете просмотреть журналы Wireshark, чтобы найти начало вызова. Щелкните правой кнопкой мыши первый пакет, к которому обращается ваш клиент (должно быть что-то вроде GET /service.svc или POST /service.svc), и выберите «Follow TCP Stream».

Wireshark будет декодировать весь HTTP-разговор, поэтому вы можете убедиться, что WCF действительно отправляет ответы.

3
ответ дан 24 November 2019 в 06:09
поделиться

Вы проверяли трассировки WCF? WCF имеет тенденцию принимать исключения и возвращать только последнее исключение, то есть время ожидания, которое вы получаете, поскольку конечная точка не вернула ничего значимого.

0
ответ дан 24 November 2019 в 06:09
поделиться

I ' Я не эксперт по WCF, но мне интересно, не сталкиваетесь ли вы с защитой от DDOS в IIS. По опыту я знаю, что если вы запускаете кучу одновременных подключений от одного клиента к серверу, в какой-то момент сервер перестает отвечать на вызовы, поскольку подозревает DDOS-атаку. Он также будет удерживать соединения открытыми до тех пор, пока они не истекут, чтобы замедлить атаки клиента.

Множественные соединения, поступающие с разных машин / IP, не должны быть проблемой.

Более подробная информация содержится в этом MSDN. сообщение:

http://msdn.microsoft.com/en-us/library/bb463275.aspx

Проверьте свойство MaxConcurrentSession.

0
ответ дан 24 November 2019 в 06:09
поделиться

У меня очень похожая проблема. В прошлом это было связано с проблемами сериализации. Если проблема не устранена, можете ли вы проверить правильность сериализации возвращаемых вами объектов. В частности, если вы используете объекты Linq-To-Sql, которые имеют отношения, существуют известные проблемы сериализации, если вы поместите обратную ссылку на дочерний объект на родительский объект и отметите эту обратную ссылку как DataMember.

Вы можете проверить сериализации путем написания консольного приложения, которое сериализует и десериализует ваши объекты с помощью DataContractSerializer на стороне сервера и любых методов сериализации, используемых вашим клиентом. Например, в нашем текущем приложении у нас есть клиенты как WPF, так и Compact Framework. Я написал консольное приложение, чтобы убедиться, что я могу сериализовать с помощью DataContractSerializer и десериализовать с помощью XmlDesserializer. Вы можете попробовать это.

Кроме того, если вы возвращаете объекты Linq-To-Sql, у которых есть дочерние коллекции, вы можете попытаться убедиться, что вы с готовностью загрузили их на стороне сервера. Иногда из-за отложенной загрузки возвращаемые объекты не заполняются и могут вызывать поведение, которое вы видите, когда запрос отправляется методу службы несколько раз.

Если вы решили эту проблему, я хотел бы услышать как, потому что я тоже с этим застрял. Я убедился, что моя проблема не в сериализации, поэтому я в растерянности.

ОБНОВЛЕНИЕ: Я не уверен, поможет ли это вам, но инструмент Service Trace Viewer Tool только что решил мою проблему после 5 дней очень похожего опыта к твоему. Настроив трассировку, а затем просмотрев необработанный XML, я обнаружил исключения, которые вызывали у меня проблемы с сериализацией. Это было связано с объектами Linq-to-SQL, у которых иногда было больше дочерних объектов, чем можно было успешно сериализовать. Добавление следующего в ваш файл web.config должно включить трассировку:

<sharedListeners>
    <add name="sharedListener"
         type="System.Diagnostics.XmlWriterTraceListener"
         initializeData="c:\Temp\servicetrace.svclog" />
  </sharedListeners>
  <sources>
    <source name="System.ServiceModel" switchValue="Verbose, ActivityTracing" >
      <listeners>
        <add name="sharedListener" />
      </listeners>
    </source>
    <source name="System.ServiceModel.MessageLogging" switchValue="Verbose">
      <listeners>
        <add name="sharedListener" />
      </listeners>
    </source>
  </sources>

Полученный файл можно открыть с помощью Service Trace Viewer Tool или просто в IE, чтобы проверить результаты.

2
ответ дан 24 November 2019 в 06:09
поделиться
1
ответ дан 24 November 2019 в 06:09
поделиться
Другие вопросы по тегам:

Похожие вопросы: