C# 记下IIS 7服务器中的异常原因

C# 记下IIS 7服务器中的异常原因,c#,wcf,iis,C#,Wcf,Iis,我正在用C和.NET Framework 4.0开发一个WCF RESTful服务 我所有的方法都是这样的: public List<User> GetAllUsers() { List<User> usersList = null; OutgoingWebResponseContext ctx = WebOperationContext.Current.OutgoingResponse; try { us

我正在用C和.NET Framework 4.0开发一个WCF RESTful服务

我所有的方法都是这样的:

public List<User> GetAllUsers()
{
    List<User> usersList = null;
    OutgoingWebResponseContext ctx =
        WebOperationContext.Current.OutgoingResponse;

    try
    {
        using (var context = new AdnLineContext())
        {
            context.Configuration.ProxyCreationEnabled = false;
            if ((context.Users != null) &&
                (context.Users.Count() > 0))
            {
                usersList = context.Users.ToList();

                ctx.StatusCode = System.Net.HttpStatusCode.OK;
            }
            else
            {
                // No users found.
                ctx.SetStatusAsNotFound();
                ctx.SuppressEntityBody = true;
            }
        }
    }
    catch (Exception)
    {
        ctx.StatusCode = System.Net.HttpStatusCode.InternalServerError;
        ctx.SuppressEntityBody = true;
    }

    return usersList;
}
但是当异常发生时,我看不到任何东西

要将ex.消息写入跟踪日志,我必须向每个catch块添加什么

这是我的web.config:

您需要使用该类通知侦听器需要记录某些内容,例如

catch (Exception ex)
{
    ctx.StatusCode = System.Net.HttpStatusCode.InternalServerError;
    ctx.SuppressEntityBody = true;
    System.Diagnostics.Trace.WriteLine(ex.Message, "GetAllUsers"); // log exception
}

错误发生在web.config上。我还没有定义跟踪

我就是这样解决这个问题的:

<system.diagnostics>
<trace autoflush="true" >
  <listeners>
    <add name="myListener"
       type="System.Diagnostics.TextWriterTraceListener"
       initializeData="D:\log\MyProjectTraces.svclog" />
    <remove name="Default"/>
  </listeners>
</trace>
</system.diagnostics>

谢谢你的回答,但是我已经用你的代码在IIS 7上发布了我的项目,我在MyTraces.svclog上没有得到任何信息。@VansFannel实际上查看你的配置时,你没有任何实际的跟踪级别侦听器-例如,如果你调用throw;在catch块的末尾是否记录了异常?我已经添加了抛出;语句,我没有记录异常。我已将我的web.config添加到我的问题中。@VansFannel-hmm应该可以工作,您的web应用程序是否具有写入该目录的权限?尝试授予它测试的完全权限。
catch (Exception ex)
{
    ctx.StatusCode = System.Net.HttpStatusCode.InternalServerError;
    ctx.SuppressEntityBody = true;
    System.Diagnostics.Trace.WriteLine(ex.Message, "GetAllUsers"); // log exception
}
<system.diagnostics>
<trace autoflush="true" >
  <listeners>
    <add name="myListener"
       type="System.Diagnostics.TextWriterTraceListener"
       initializeData="D:\log\MyProjectTraces.svclog" />
    <remove name="Default"/>
  </listeners>
</trace>
</system.diagnostics>
catch (Exception ex)
{
    ctx.StatusCode = System.Net.HttpStatusCode.InternalServerError;
    ctx.SuppressEntityBody = true;
    System.Diagnostics.Trace.WriteLine(ex.Message, "GetAllUsers"); // log exception
}