2012-05-25 1 views
2

У меня есть сервер/клиентское приложение SOAP, написанное в Delphi XE, работающее нормально в течение некоторого времени, до тех пор, пока пользователь не запустит его на Windows 7 x64 за корпоративным прокси-сервером. Приложение отправляет и получает объект TSOAPAttachment в запросе.SOAP-сервер не мог нормально работать за некоторым прокси-сервером

Проблема:

  • После того, как первый запрос от этого пользователя принимается и обрабатывается, сервер не может обработать любой запрос (от любого пользователя) успешно приходя после этого.
  • Сервер по-прежнему реагирует на запрос, но SOAPAttachment запроса кажется поврежденным после первого от этого пользователя, поэтому он не смог обработать запрос успешно.
  • После установки может отлаживать журналы на сервере, я заметил, что TSOAPAttachment.SourceStream в параметре запроса становится недоступным (или пустым), а TSOAPAttachment.CacheFile также пуст. Поэтому всякий раз, когда вы пытаетесь использовать SourceStream, он будет возвращать ошибку Access Violation.
  • Дальнейшие исследования показали, что файл BorlandSoapAttachment (n), сгенерированный во временной папке по первому запросу, все еще существует и заблокирован (который должен быть удален, когда запрос завершен в обычном режиме) и файлы BorlandSoapAttachment (n + 1) следующих запрос накапливаются.
  • SOAP-сервер снова будет работать после перезапуска IIS или утилизации пула приложений.
  • Совершенно очевидно, что он вызван прокси-сервером или сетями пользователя, поскольку, когда тот же компьютер работает за пределами этих сетей, он будет работать нормально.
  • Чтобы добавить больше загадок в проблему, запуск приложения на WinXP за тем же прокси-сервером не имеет проблем AT ALL!

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

Большое спасибо заранее.

ответ

1

Если вы действительно уверены, что вы отлажена всю свою логику сервера, который обрабатывает вложения, чтобы пытаться делать обнаружить любой кусок кода, который мог бы не удалось конкретно на Windows 7, я хотел бы предложить:

1) Используйте некоторые сетевые перехватчик Wireshark is good for this task, выполните два последующих запроса с одинаковыми значениями данных/параметров и сравните содержимое HTTP. Этот анализ должен выполняться как в клиенте (чтобы увидеть, всегда ли данные покидают клиентскую машину с одним и тем же контентом), а также на сервере, для анализа входящих данных;

2) Я столкнулся с подобной ситуацией в прошлом, и мои попытки понять проблему были не очень успешными. Я обошел проблему отправки файлов в качестве базовых параметров в кодировке Base64 и не использовал вложения SOAP. Боковое влияние использования Base64 на увеличение 30% в размере данных, которые нужно отправить, и это может быть значительным, если вы переносите большие файлы.

Помните, что вложения SOAP создают временные файлы на сервере, а Windows 7 имеет разные правила доступа к файлам, чем Windows XP. Я не знаю, могло ли это объяснить первый обработанный вызов, а другие нет, но, возможно, есть что-то, связанное с доступом к файлу.

1

Возможно, это проблема с UAC (User Access Control) под Win 7. Попробуйте запустить клиент в win 7 «Как администратор» и посмотрите, работает ли он правильно.

+0

, но одни и те же пользовательские настройки, установленные за пределами своей корпоративной сети, работают нормально, поэтому почти наверняка это прокси-сервер/брандмауэр. но я не мог объяснить, почему на Win7, действительно ли win7 действует по-разному в корпоративной сети? – sfx