2010-08-23 3 views
2

Я использую C# для написания программы, которая использует веб-службу от http://msrmaps.com, проблема иногда (кажется, случайно), сайт не будет работать должным образом и вернет несколько разных исключений. Затем при последующих попытках использовать службу я получаю ошибку снова и снова, а через некоторое время (иногда 30 минут) служба снова начинает работать правильно. Чтобы не дождаться возобновления работы службы, я обычно просто закрываю программу и снова запускаю ее. Обычно это устраняет проблему, и я могу продолжать использовать веб-службу.Повторно подключиться к веб-сервису?

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

+0

Если возможно, пожалуйста, покажите код, который у вас есть: 1) подключается к услуге 2) выполняет конкретные вызовы. Кроме того, какие именно исключения? Вы пробовали просить msrmaps.com об этом? На данный момент этот сайт не подходит для меня, поэтому я не могу больше копаться в них на их стороне. –

+0

Я не уверен, какой код показывать, поскольку я добавил веб-сервис с помощью Visual Studio, поэтому большая часть этого была написана для меня. Сами вызовы относятся к веб-сервису на странице «http://msrmaps.com/TerraService2.asmx». Я пробовал связаться с mssrmaps.com без ответа за последние несколько дней. Исключения, которые я получаю, в основном: System.Web.Services.Protocols.SoapException: сервер не распознал значение HTTP-заголовка SOAPAction: http://msrmaps.com/GetAreaFromRect. Который из того, что я исследовал, обычно является проблемой пространства имен. Я считаю, что проблема связана с сервером, так как недавно – Mawk

+0

изменили свои серверы с http://terraserver-usa.net на http://msrmaps.com, и иногда их сайт будет по-прежнему ссылаться на старый http: // terraserver- usa.net, которое, по-видимому, является причиной того, что я получаю это исключение. Цель этого сообщения - разработать обходной путь этой проблемы, просто попробовав снова подключиться к веб-службе, пока я не подключусь к их сайту с правильным пространством имен. Пока они не исправит проблему на их конце, это все, о чем я могу думать. – Mawk

ответ

0

Предупреждение: Это немного взломанный, но он работает.

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

У нас была аналогичная ситуация, когда самым простым решением проблемы было закрытие и перезапуск приложения. (Мы будем называть это «Приложение А»).

Что я сделал, это написать второй исполняемый файл (мы будем называть его «Приложение B») в качестве консольного приложения, которое делало две вещи.

  1. Он использовал System.Diagnostics.Process убить любой экземпляр App A.
  2. Используйте System.Diagnostics.Process для повторного запуска приложение А после того, как все экземпляры были убиты.

Тогда в App А я имел TRY/поймать вокруг кода обижая, и когда ошибка я искал придумал, это было бы назвать App B.

Это был единственный способ, которым я мог найти убийство программы и перезапустить ее. Если у кого-то есть лучшее решение, ПОЖАЛУЙСТА, опубликуйте его, и я изменю свой взломать, чтобы использовать лучшее решение.

+0

Я мог бы попросить пользователя перезапустить программу, но я хотел бы избежать этого и как-то снова подключиться к веб-службе за кулисами. – Mawk

+0

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

3

Какова программа на самом деле, которая зависит от веб-службы? Нужно ли его снова запускать? Похоже, вы должны иметь только некоторый элемент пользовательского интерфейса в приложении, которое пытается подключиться к службе. Оберните это соединение в некоторых обработках исключений и где-нибудь в пользовательском интерфейсе приложения, что соединение с сервисом в настоящее время недоступно.

Или я ухожу сюда?

+0

+1 вызов внешней системы должен быть надлежащим образом обернут обработкой ошибок, когда указанная доступность системы/службы находится вне контроля – kd7

+0

Программа пытается загрузить изображение плитки с помощью веб-службы, описанной в разделе «http://msrmaps.com/ TerraService2.asmx». Сама программа действительно не нуждается в повторном запуске, но где-то во время перезапуска программы веб-служба подключается и работает, когда ранее она получала исключение. Я надеялся, что есть какой-то способ подключиться к веб-службе, не перезагружая программу. Я считаю, что сервис по-прежнему доступен, за исключением того, что сайт ведет себя странно в последнее время. После обновления его несколько раз он снова вернется. – Mawk

+0

@Mawk: его не нужно перезапускать, соединения веб-службы не сохраняются. Приложение должно иметь возможность удалять один и тот же веб-сервис снова и снова, пока он не получит то, что ему нужно. Если служба запускается только один раз при запуске приложения, то это звучит так, как будто бит логики должен переходить в общую функцию, вызываемую при запуске приложения или при запуске вручную или при выполнении какого-либо другого условия (например, интервала времени, в котором служба не была повторно удалена с предыдущего исключения) и т. д. – David

0

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

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

+0

Когда возникает проблема, обычно у меня только один запрос, хотя может быть много других, поступивших от других людей, обращающихся к веб-службе.Я действительно пытался использовать периоды ожидания и, по большей части, похоже, работает. Несмотря на то, что приложение можно оставить без присмотра, я хотел бы найти более быстрый способ вернуть и запустить приложение. Поэтому я надеюсь, что у кого-то есть идея, почему перезапуск приложения и попытка снова устранить проблему, и если я могу сделать это в моей программе. – Mawk

Смежные вопросы