Отладка продолжительного вызова Webservice - PullRequest
0 голосов
/ 07 декабря 2018

Я использую C # для подключения к веб-сервису для сбора данных.Однако в настоящее время у меня возникают проблемы с запуском кода на удаленном сервере;когда я говорю о проблемах, я имею в виду его работу, но скорость соединения между клиентом и сервером смехотворно медленная (не по моей вине - клиент предоставляет медленный набор результатов через веб-сервис, и у них все тайм-ауты отключены на их стороне, чтобыдля этого.)

 if ((endpointConfiguration == EndpointConfiguration.SFFService))
            {
                System.ServiceModel.BasicHttpBinding result = new System.ServiceModel.BasicHttpBinding();
                result.MaxBufferSize = int.MaxValue;
                result.ReaderQuotas = System.Xml.XmlDictionaryReaderQuotas.Max;
                result.MaxReceivedMessageSize = int.MaxValue;
                result.AllowCookies = true;
                result.OpenTimeout = TimeSpan.MaxValue;
                result.CloseTimeout = TimeSpan.MaxValue;
                result.SendTimeout = TimeSpan.MaxValue;
                return result;
            }

Итак.Не очень хорошее начало.Откройте «Закрыть» и отправьте все настройки на максимум.

В любом случае, я сопоставил их длительные тайм-ауты с моей стороны, и несколько небольших запросов веб-службы завершаются и успешно выполняются на сервере.Самый большой, самый медленный, однако, просто зависает бесконечно, вероятно, потому что я сказал ему никогда не останавливаться.

Тем не менее, я почти уверен, что произошла какая-то другая проблема, так как я оставил ее на ночь, и она просто сидела там.Локально, на моей машине разработки, хотя и медленно, это работает.

Мой вопрос: есть ли у кого-нибудь идеи по поводу дополнительных вещей, чтобы проверить, какая среда потенциально может быть здесь?Я подумал, что, возможно, брандмауэр, но, учитывая, что небольшие запросы успешно выполняются (и соединяются), очень трудно отлаживать медленные запросы, так как я не знаю, как долго ждать, пока программа не выполнит ничего.

FWIW Я попытался подключиться через браузер, и снова браузер просто сидит и ждет завершения запроса, чего он никогда не делает (скорее всего, из-за того, что на сервере отключено время ожидания).Если бы был какой-либо способ узнать, какая часть запроса осталась завершенной (например, процент загрузки), это может помочь дать мне некоторое представление о том, выполняет ли код что-то кроме ожидания.

1 Ответ

0 голосов
/ 09 декабря 2018

Нет способа получить ход удаленного вызова, даже если вы подключены к удаленному процессу.Попробуйте использовать локальную Visual Studio на сервере (предпочтительно на непроизводственной виртуальной машине) и подключиться к локальному процессу, а не с помощью удаленного отладчика.

Я не уверен, что именно вопрос, но первыйшаг, который я предпринял бы при отладке медленного приложения, состоял бы в том, чтобы проверить локальное соединение (локальный клиент и локальный сервер), чтобы исключить сеть из уравнения.Если это работает хорошо, попробуйте разместить сервер в другом месте (может быть, в публичном облаке?) И повторите попытку там, если это работает хорошо, то определенно что-то находится на маршруте или на этом сервере.

Если выЗаинтересовавшись отслеживанием продолжительности вызовов веб-службы, вы можете отследить его, указав время начала в HttpContext.Current.Items или OperationContext.Current.Items в BeginRequest / EndRequest в Global.asax или в MessageInspector, если вы используете WCF (вы можетеотправьте datetime между двумя методами, вернув его в метод Before и прочитав его из параметра corelationState в методе After).

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