【问题标题】:ServiceEventSource and Service FabricServiceEventSource 和 Service Fabric
【发布时间】:2017-12-05 22:42:21
【问题描述】:

按照一个非常简单的代码来玩弄 Service Fabric 中的异常处理和日志记录:

public async Task<IActionResult> Get()
{
    ServiceEventSource.Current.ServiceMessage(serviceContext, $"Entered 'GetAll' method");

    IActionResult result = null;
    List<Customer> list = new List<Customer>();

    try
    {
        using (CustomersContext context = new CustomersContext(connectionString))
        {
            list = context.Customers.Where(a => a.IsDeleted == false).ToList<Customer>();
        }
        result = Json(list);

        throw new ArgumentException("Argument exception", new NullReferenceException("Null reference exception"));
    }
    catch (Exception ex)
    {
        result = StatusCode(StatusCodes.Status500InternalServerError);
        ServiceEventSource.Current.ServiceMessage(serviceContext, $"Exception: " + JsonConvert.SerializeObject(ex));
    }
    finally
    {
        ServiceEventSource.Current.ServiceMessage(serviceContext, $"Exiting 'GetAll' method");
    }
    return result;
}

我的问题是:为什么开头这行代码

ServiceEventSource.Current.ServiceMessage(serviceContext, $"Entered 'GetAll' method");

以及finally块中的这行代码

ServiceEventSource.Current.ServiceMessage(serviceContext, $"Exiting 'GetAll' method");

工作正常并在诊断事件中记录条目,而这个在 catch 块中

ServiceEventSource.Current.ServiceMessage(serviceContext, $"Exception: " + JsonConvert.SerializeObject(ex));

出现以下错误:“ServiceEventSource 错误 CS0103:名称 'ServiceEventSource' 在当前上下文中不存在”?

谢谢!

【问题讨论】:

  • 与其编辑问题以添加解决方案,不如将其发布为答案!不禁止回答自己的问题(甚至可以在Ask a Question 页面直接回答问题)

标签: azure-service-fabric


【解决方案1】:

已解决

分析被调用方法的签名和代码,我们注意一件事:

public void ServiceMessage(ServiceContext serviceContext, string message, params objects[] args)

这意味着message参数用于string.Format方法。

我的问题是传递带有“{”和“}”字符的 Json 字符串,它会抛出异常,因为它无法识别格式。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-07-26
    • 2018-08-02
    • 2016-03-11
    • 2019-11-30
    • 1970-01-01
    • 2017-03-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多