Проблема подключения .NET WebServices - PullRequest
0 голосов
/ 22 сентября 2010

В настоящее время я работаю над программным обеспечением, разработанным в WPF, которое подключается к набору веб-сервисов.Веб-сервисы определены в app.config: конечная точка моего приложения:

<endpoint address="http://localhost:52870/WebServices/Service.svc" 
  behaviorConfiguration="VanguardWebServiceBehavior" binding="wsHttpBinding"
  bindingConfiguration="WSHttpBinding_IService" contract="WebServices.IService"
    name="WSHttpBinding_IService">

и в ApplicationSettings:

<applicationSettings>
 <MyApp.Properties.Settings>
  <setting name="PrimaryRS" serializeAs="String">
    <value>http://localhost:50563/</value>
  </setting>
  <setting name="PrimaryWS" serializeAs="String">
    <value>http://localhost:52870/WebServices/Service.svc</value>
  </setting>
  <setting name="SecondaryWS" serializeAs="String">
    <value>http://localhost:52870/WebServices/Service.svc</value>
  </setting>
 </MyApp.Properties.Settings>
</applicationSettings>

. Это работает нормально, пока веб-сервисы доступны,однако, когда WebServices недоступны, происходит сбой приложения.Мне интересно, есть ли в любом случае перехват исключений, которые выдаются, когда веб-сервисы недоступны, и просто открывают приложение в каком-то состоянии Disconnected, чтобы ничего не редактировалось.

Заранее спасибо,

Патрик

Ответы [ 2 ]

1 голос
/ 04 марта 2011

Итак, я наконец выяснил, что происходит с этой проблемой.

Чтобы перехватить исключение EndpointNotFoundException при загрузке приложения, вся логика try / catch для начального соединения должна быть в файле App.xaml.cs, а не в MainPage.xaml.cs.

В файле MainPage.xaml.cs у меня была информация для автоматического входа в систему и элементы подключения WebService, и ошибка там не обнаруживалась. После перемещения имени входа и подключения WebService из MainPage.xaml.cs в App.xaml.cs я могу легко перехватывать сбои подключения WebService.

Надеюсь, это поможет кому-то еще.

1 голос
/ 22 сентября 2010

Из вашей конфигурации это выглядит так, как будто вы используете WCF - верно?

В этом случае, по сути, просто оберните ваши вызовы веб-службы в try...catch блоки:

try
{ 
    WebServiceClient client = new WebServiceClient();
    client.CallSomeMethod();
}
catch(EndpointNotFoundException exc)
{
   // endpoint not found --> webservice is not up and running
}
.....  
catch(CommunicationException exc)
{
   // base WCF exception - for things like config errors etc.
}

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

Почти все исключения WCF являются потомками CommunicationException (см. Документацию MSDN ) - так, чтобы это перехватывало большинство ошибок WCF.

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

...