我目前正在研究一种在WPF中设计的软件,它连接到一组Web服务。 WebServices在我的应用程序的app.config:endpoint中定义:
<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>
只要可以访问Web服务,这样就可以正常工作,但是当Web服务无法访问时,应用程序崩溃了。我想知道是否有任何方法可以捕获Web服务无法访问时抛出的异常,只需在某种Disconnected状态下打开应用程序,这样就无法编辑任何内容。
提前致谢,
帕特里克
答案 0 :(得分:1)
从您的配置中,看起来好像您正在使用WCF - 对吧?
在这种情况下,基本上只需将您的Web服务调用包装在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 documentation) - 所以抓住它应该处理大多数WCF错误。
如果您想对发送错误的服务作出反应,您可能还想捕获FaultException
(CommunicationException
之前) - 那些将是服务器上的执行可能导致的错误(例如,无法连接到数据库或后端或其他东西)。
答案 1 :(得分:1)
所以我终于找到了这个问题。
要在应用程序加载时捕获EndpointNotFoundException,初始连接的所有try / catch逻辑必须位于App.xaml.cs中,而不是MainPage.xaml.cs中。
我在MainPage.xaml.cs中有自动登录信息和WebService连接部分,并且没有发现错误。将登录和WebService连接移出MainPage.xaml.cs并进入App.xaml.cs后,我能够轻松捕获WebService连接失败。
希望这有助于其他人。