WCF用户代码未处理的异常

时间:2011-04-29 15:31:29

标签: c# wcf error-handling

我正在使用C#和.NET Framework 4.0开发WCF服务。

我有以下代码:

public long CreateUser(string userName)
{
    try
    {
        if ((userName == null) ||
            (userName.Equals(string.Empty)))
            throw new ArgumentNullException();

        ...

    }
    catch (Exception ex)
    {
        resultCode = 3;
        throw ex;
    }

    ...

}

当userName == string.Empty调试器停止并且对话框说:

ArgumentNullException unhandled by user code.

我该如何解决?

更新

我想通知客户端服务器端有错误。

6 个答案:

答案 0 :(得分:1)

使用CreateUser方法时需要处理异常:

try
{
    myClass.CreateUser (user);

}
catch (ArgumentNullException ex)
{

}

答案 1 :(得分:1)

我认为最好在方法的顶部做一些这样的事情而不是创建并抛出异常。

if (string.IsNullOrEmpty(userName))
{
  //handle
}

答案 2 :(得分:1)

我认为String.IsNullOrEmpty()是最清晰的方式;但我不确定我理解这个问题。

您的IF正在运作;而你的代码正在抛出异常。所以用String.IsnullOrEmpty()写它不会改变它。

你想知道如何'处理'那个例外吗?

答案 3 :(得分:1)

如果您想通知客户使用FaultException

答案 4 :(得分:0)

处理异常: - )

这是正常行为。

您的客户必须像这样调用您的方法:

try {
   long result = myService.CreateUser(someVariable);
} catch (ArgumentNullException exc)
{
  // Your error-handling code here
}

如果你不想处理异常,只是处理“错误代码”(这是一种不好的做法,绝对不推荐),那么你应该删除“throw ex;”你代码中的一行。

答案 5 :(得分:0)

首先,您应该了解String.IsNullOrEmpty(),它对您提供的情况很有用。

其次,你在堆栈中抛出异常。需要一个try / catch块进一步向上捕获你正在抛出的异常。在这里,try / catch对你没有好处。

public long CreateUser(string userName)
{
        if (String.IsNullOrEmpty(userName))
            throw new ArgumentNullException();

        ...
}

然后在其他地方,

try 
{
     someClass.CreateUser(userName);
}
catch (ArgumentNullException ex)
{
  ... error handling code here
}