.NET Web服务连接问题

时间:2010-09-22 15:39:40

标签: c# .net web-services exception-handling app-config

我目前正在研究一种在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状态下打开应用程序,这样就无法编辑任何内容。

提前致谢,

帕特里克

2 个答案:

答案 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错误。

如果您想对发送错误的服务作出反应,您可能还想捕获FaultExceptionCommunicationException之前) - 那些将是服务器上的执行可能导致的错误(例如,无法连接到数据库或后端或其他东西)。

答案 1 :(得分:1)

所以我终于找到了这个问题。

要在应用程序加载时捕获EndpointNotFoundException,初始连接的所有try / catch逻辑必须位于App.xaml.cs中,而不是MainPage.xaml.cs中。

我在MainPage.xaml.cs中有自动登录信息和WebService连接部分,并且没有发现错误。将登录和WebService连接移出MainPage.xaml.cs并进入App.xaml.cs后,我能够轻松捕获WebService连接失败。

希望这有助于其他人。