0

我的客户端应用程序中有一个Connection类,它将连接到 WCF 服务器。

如果服务器未启动,或者客户端无法连接到服务器,则应捕获异常并在标签上显示错误消息。

我第一次创建Connection类的实例是在这里,在我的LoginViewModel类中:

sta = Connection.Instance.HttpProxy.Login(LoginID, LoginPassword);

这就是引发第一个异常的地方。但是,如果我添加一个 try/catch 块,则不会捕获异常,而是XamlParseException会抛出一个异常。类的构造函数中的 try/catch 块Connection也不起作用。我该如何处理?

Connection班级:

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);
        }
    }
}
4

1 回答 1

0

Login 方法中会引发异常,因为这是客户端第一次尝试连接到服务器。您可以将 try catch 放在此方法周围,而不是初始化。除了您应该考虑正确处理连接类之外,您的连接取决于一次性对象。当某些东西无法正常工作时,您必须调用 dispose 方法。如果您多线程访问它,我不会让 Singlton 连接处理所有复杂性和错误处理。如果在单例情况下出现问题,没有适当的方法可以恢复您的频道。

于 2013-06-18T08:00:59.923 回答