У мене на клієнтському сервері працює програма ASP.NET (W2k3, IIS6, .NET 2.0). FWIW, це тестовий приклад, він ще не переміщений у виробництво . Отже, він не працює під SSL, балансування навантаження тощо.
Коли я отримую доступ до однієї зі сторінок на їх сервері з нашого офісу, ця сторінка потрапляє один раз. Перевіряючи журнали IIS (c: WINDOWS \ system32 \ LogFiles \ W3SVC1), відображається GET для цієї сторінки, потім я натискаю кнопку на сторінці, а файл журналу показує POST. Здається, поки що це працює нормально.
Тепер, коли я віддаляюся в мережу клієнта і отримую доступ до сторінки з однієї з локальних машин, файл журналу показує GET, потім я натискаю кнопку на сторінці, і журнал показує два POST в одну і ту ж секунду. Перший показує статус (sc-status, sc-substatus, sc-win32-status) 200 0 64, другий показує 200 0 0.
У файлі журналу обидва POST однакові. В основному журнал виглядає приблизно так (за винятком того, що я замаскував деякі дані):
#Fields: час часу s-ip cs-метод cs-uri-stem cs-uri-query s-port cs-username c-ip cs (User-Agent) sc-status sc-substatus sc-win32-status 2009-08-11 20:19:32 xxxx GET /File.aspx - 80 - yyyy Mozilla / 4.0 + (сумісний; + MSIE + 8.0; + Windows + NT + 6.0; + WOW64; + Тризуб / 4.0; + SLCC1; + .NET + CLR + 2.0.50727; +. NET + CLR + 3.5.21022; +. NET + CLR + 3.5.30729; +. NET + CLR + 3.0.30618; + MDDR; + OfficeLiveConnector.1.4; + OfficeLivePatch .0.0) 200 0 0 11.08.2009 20:19:45 xxxx POST /File.aspx - 80 - yyyy Mozilla / 4.0 + (сумісний; + MSIE + 8.0; + Windows + NT + 6.0; + WOW64; + Тризуб / 4.0; + SLCC1; + .NET + CLR + 2.0.50727; +. NET + CLR + 3.5.21022; +. NET + CLR + 3.5.30729; +. NET + CLR + 3.0.30618; + MDDR; + OfficeLiveConnector.1.4; + OfficeLivePatch .0.0) 200 0 64 11.08.2009 20:19:45 xxxx POST /File.aspx - 80 - yyyy Mozilla / 4.0 + (сумісний; + MSIE + 8.0; + Windows + NT + 6.0; + WOW64; + Тризуб / 4.0; + SLCC1; + .NET + CLR + 2.0.50727; +. NET + CLR + 3.5.21022; +. NET + CLR + 3.5.30729; +. NET + CLR + 3.0.30618; + MDDR; + OfficeLiveConnector.1.4; + OfficeLivePatch .0.0) 200 0 0
Проблема в тому , що сторінка потрапляє двічі. База даних виконує операцію над першим запитом, потім другий запит виявляє, що виконується дублікат операції, і видає повідомлення про помилку. Користувачі вважають, що їх функціонування не вдалося, але це фактично вдалося.
Опис помилки sc-win32-status 64: "Вказане мережеве ім'я більше недоступне." Це приводить мене до думки, враховуючи, що обидва запити POST показують стан HTTP 200, що сервер успішно обслуговує запит, але клієнт ніколи не отримує повідомлення та повторно подає запит.
Як я можу це усунути?
Будь-які ідеї, що може викликати таку поведінку лише у їх внутрішній мережі?
Я мушу зазначити, що це відбувається на двох окремих клієнтських сайтах, але це не відбувається на шести інших наших клієнтських сайтах, або в нашому офісі, або підключення до будь-якого з наших восьми клієнтів через Інтернет.
Що може зробити це відтворюваним 100% часу в їх локальній мережі, але 0% часу в будь-якому іншому місці?
Оновлення: Я виявив, що дуже мала кількість дублюваних POST запитів мала sc-win32-статус 995 замість 64, як повідомлялося спочатку. Опис помилки sc-win32-status = 995: "Операція вводу / виводу була скасована через вихід потоку або запит програми." Це не має сенсу (враховуючи, що я маю повний доступ до коду). Я досі не розумію, як і чому виникає ця проблема, але новий код помилки спонукає мене вважати, що це може бути проблемою не в мережі, і я зараз досліджую можливість випадкової помилки коду.