【问题标题】:WCF unhandled exception by user code用户代码未处理的 WCF 异常
【发布时间】:2011-04-29 15:31:28
【问题描述】:

我正在使用 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.

我该如何解决这个问题?

更新

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

【问题讨论】:

  • 我想通知客户端服务器端出错。
  • 旁注:永远不要使用throw ex,使用throw 重新抛出异常
  • 如果您想通知客户端,请使用 string.IsNullOrEmpty 测试并以您选择的任何方式通知客户端。
  • 这是一个 WCF。我认为有一种方法可以通知客户,但我不知道如何。这就是我离开throw ex的原因。
  • 不要扔前任;这样你就会丢失信息。相反,你应该简单地写 throw;这样你就可以保留所有信息,stacktrace。

标签: c# wcf error-handling


【解决方案1】:

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

try
{
    myClass.CreateUser (user);

}
catch (ArgumentNullException ex)
{

}

【讨论】:

    【解决方案2】:

    我认为最好只在方法的顶部执行类似的操作,而不是创建并抛出异常。

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

    【讨论】:

      【解决方案3】:

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

      您的 IF 工作正常;并且您的代码正在引发异常。所以用 String.IsnullOrEmpty() 编写它不会改变这一点。

      您想知道如何“处理”该异常吗?

      【讨论】:

        【解决方案4】:

        如果您想通知客户,请使用FaultException

        【讨论】:

          【解决方案5】:

          处理异常:-)

          这是正常行为。

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

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

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

          【讨论】:

            【解决方案6】:

            首先,您应该了解 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
            }
            

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2017-12-12
              • 1970-01-01
              • 2018-10-25
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多