Event-Driven 异步 WCF 服务调用中的异常处理
Exception handling in Event-Driven Async WCF service call
问题涉及 Windows Phone 8.1 SL 应用程序,该应用程序使用 WCF 服务连接到数据库并从中检索信息。我们如何处理对数据库的通信错误异常?假设该服务是开启的,我们可以访问它,但是由于某种原因该服务没有访问数据库的权限。此类错误处理是否应由 WCF 负责?如果是那么它应该如何写入用户友好的显示信息,如消息框?
第二件事:我决定自己模拟无法访问WCF服务。为此,我刚刚更改了服务的 IP 地址。我想从应用程序端处理这个异常,但我总是在 Visual Studio 中得到错误异常。有什么建议错误 class 负责处理与服务的通信错误吗?
我正在尝试这样的事情:
public partial class Kurs : PhoneApplicationPage
{
CenyMiejscaService.CenyMiejscaServiceClient cenyMiejscaUsluga;
Dictionary<DateTime, double> kurs;
public Kurs()
{
InitializeComponent();
kurs = new Dictionary<DateTime, double>();
try
{
cenyMiejscaUsluga = new CenyMiejscaService.CenyMiejscaServiceClient();
cenyMiejscaUsluga.PobierzKursRublaCompleted += cenyMiejscaUsluga_PobierzKursRublaCompleted;
cenyMiejscaUsluga.PobierzKursRublaAsync();
}
catch(CommunicationException ex)
{
MessageBox.Show(ex.Message);
}
}
}
但我只收到 Visual Studio 抛出的异常:
假设错误处理在 WCF 服务中。你能对这个错误做些什么?几乎什么都没有,因为数据库已关闭并且您无法更正它。 WCF 服务应该做的就是将错误转发给客户端。然后客户端可以解释错误并显示消息。
在您实际可以采取措施的地方处理错误。
第二个问题我不清楚。看来您只需要捕获结果 CommunicationException
。也许 InnerException
包含一些有用的东西。如果没有,你无能为力。 .NET 中的异常层次结构存在严重缺陷,因为它通常不允许您区分不同的错误。
问题涉及 Windows Phone 8.1 SL 应用程序,该应用程序使用 WCF 服务连接到数据库并从中检索信息。我们如何处理对数据库的通信错误异常?假设该服务是开启的,我们可以访问它,但是由于某种原因该服务没有访问数据库的权限。此类错误处理是否应由 WCF 负责?如果是那么它应该如何写入用户友好的显示信息,如消息框?
第二件事:我决定自己模拟无法访问WCF服务。为此,我刚刚更改了服务的 IP 地址。我想从应用程序端处理这个异常,但我总是在 Visual Studio 中得到错误异常。有什么建议错误 class 负责处理与服务的通信错误吗?
我正在尝试这样的事情:
public partial class Kurs : PhoneApplicationPage
{
CenyMiejscaService.CenyMiejscaServiceClient cenyMiejscaUsluga;
Dictionary<DateTime, double> kurs;
public Kurs()
{
InitializeComponent();
kurs = new Dictionary<DateTime, double>();
try
{
cenyMiejscaUsluga = new CenyMiejscaService.CenyMiejscaServiceClient();
cenyMiejscaUsluga.PobierzKursRublaCompleted += cenyMiejscaUsluga_PobierzKursRublaCompleted;
cenyMiejscaUsluga.PobierzKursRublaAsync();
}
catch(CommunicationException ex)
{
MessageBox.Show(ex.Message);
}
}
}
但我只收到 Visual Studio 抛出的异常:
假设错误处理在 WCF 服务中。你能对这个错误做些什么?几乎什么都没有,因为数据库已关闭并且您无法更正它。 WCF 服务应该做的就是将错误转发给客户端。然后客户端可以解释错误并显示消息。
在您实际可以采取措施的地方处理错误。
第二个问题我不清楚。看来您只需要捕获结果 CommunicationException
。也许 InnerException
包含一些有用的东西。如果没有,你无能为力。 .NET 中的异常层次结构存在严重缺陷,因为它通常不允许您区分不同的错误。