如何从远程WCF服务中捕获异常?

时间:2015-06-04 10:52:59

标签: c# visual-studio wcf exception handle

从Visual Studio UI添加引用后,我初始化了客户端:

private WcfRequestProcessorClient _client;

var binding = new BasicHttpBinding();
binding.Security.Mode = BasicHttpSecurityMode.TransportCredentialOnly;

string serviceFullUrl = "http://myserviceurl.com/svcapi";
var address = new EndpointAddress(serviceFullUrl);

_client = new WcfRequestProcessorClient(binding, address);
_client.ClientCredentials.UserName.UserName = "MyUserName";
_client.ClientCredentials.UserName.Password = "MyPassword";

之后,我将请求作为参数调用相关方法:

try
{
    var itemsReq = LoadItemsRequest();
    _client.ProcessRequestsAsync(itemsReq);
}
catch(Exception)
{
     // source code for show an error in a popup
}

现在,当网址,用户名和密码正确时,一切正常。但如果网址,用户名或密码错误应用程序中断,Visual Studio会在调试时显示此窗口,跳过我的阻止

enter image description here

处理这类异常的方法是什么?

2 个答案:

答案 0 :(得分:0)

需要配置服务以将真实的异常传播给您。

如果你不知道你所陈述的实际原因,它会如何表示抛出异常。 '被抛出的异常

未捕获异常的原因是该调用是异步的。

即。异常被抛出在另一个堆栈上,然后是你调用它的那个。

如果它返回一个Task,你需要等待它。

如果它是APM风格的异步性,你必须提供一个回调并尝试在那里捕获它。

此外,您可以注册AppDomain.UnhandledException以最终捕获此异常。

答案 1 :(得分:0)

catch(Exception e)
    {
     MessageBox.Show(e.Message.ToString());
    }

希望这会有所帮助。     对于Advance异常抛出,请参阅WCF中的FaultException。它专为面向服务的体系结构而设计。