使用WCF连接到服务器失败时捕获异常:
本文关键字:捕获异常 失败 服务器 WCF 连接 使用 | 更新日期: 2023-09-27 18:18:45
我的客户端应用程序中有一个Connection
类,它将连接到WCF服务器。
如果服务器未启动,或者客户端无法连接到服务器,则应该捕获异常并在标签上显示错误消息。
我第一次创建Connection
类的实例是在这里,在我的LoginViewModel
类中:
sta = Connection.Instance.HttpProxy.Login(LoginID, LoginPassword);
,这是抛出第一个异常的地方。但是,如果我添加一个try/catch块,则不会捕获异常,而是抛出XamlParseException
。Connection
类的构造函数中的try/catch块也不能工作。我该如何处理?
Connection
class:
public sealed class Connection {
private readonly string _address = ConfigurationManager.AppSettings["ConnectionAddress"];
private static Connection _instance;
private static object _padLock = new Object();
private static ChannelFactory<IPoS> httpFactory;
private static IPoS _httpProxy; //Singleton
public IPoS HttpProxy { get { return _httpProxy; } }
public static Connection Instance {
get {
if (_instance == null) {
lock (_padLock) {
if (_instance == null) {
_instance = new Connection();
}
}
}
return _instance;
}
}
private Connection() {
try {
httpFactory = new ChannelFactory<IPoS>(
new BasicHttpBinding(),
new EndpointAddress(_address));
_httpProxy = httpFactory.CreateChannel();
}
catch (Exception ex) {
BaseViewModel.SetErrorMessage("Error: " + ex, this);
}
}
}
在Login方法中抛出异常,因为这是客户端第一次尝试连接到服务器。您可以将try catch放在此方法的周围,而不是初始化。除了您应该考虑正确处理连接类之外,您的连接依赖于一次性对象。当某些东西不能正常工作时,您必须调用dispose方法。我不认为singleton连接将处理所有的复杂性,如果你访问它多线程错误处理正确。如果在单个情况下出现问题,则没有适当的方法来恢复您的通道。