Azure service fabric 获取使用服务结构ServiceRemoting时要执行的方法的名称

Azure service fabric 获取使用服务结构ServiceRemoting时要执行的方法的名称,azure-service-fabric,azure-application-insights,service-fabric-stateless,Azure Service Fabric,Azure Application Insights,Service Fabric Stateless,我正在尝试使用应用程序洞察进行一些日志记录,我希望记录每个依赖项调用 我这样做是基于以下关于如何设置标题值的答案: 在RequestResponseAsync方法中,我创建了DependencyTelemetry对象,可以将服务记录到调用的位置、持续时间等。但是,我也希望能够设置在服务中调用的方法名称,但我似乎在任何地方都找不到它。我们正在讨论WebApi到SF服务调用和SF服务到SF服务调用 有人能告诉我,我在这里的路径是否正确,或者我是否应该覆盖其他方法 以下是我基于之前链接的SO的自定义代

我正在尝试使用应用程序洞察进行一些日志记录,我希望记录每个依赖项调用

我这样做是基于以下关于如何设置标题值的答案:

在RequestResponseAsync方法中,我创建了DependencyTelemetry对象,可以将服务记录到调用的位置、持续时间等。但是,我也希望能够设置在服务中调用的方法名称,但我似乎在任何地方都找不到它。我们正在讨论WebApi到SF服务调用和SF服务到SF服务调用

有人能告诉我,我在这里的路径是否正确,或者我是否应该覆盖其他方法

以下是我基于之前链接的SO的自定义代码回答:

public async Task<IServiceRemotingResponseMessage> 
RequestResponseAsync(IServiceRemotingRequestMessage requestMessage)
{
    var correlationId = SetCorrelationId(requestMessage);
    IServiceRemotingResponseMessage response = null;

    var startTime = DateTime.UtcNow;
    var timer = Stopwatch.StartNew();

    try
    {
        response = await _inner.RequestResponseAsync(requestMessage);
        timer.Stop();
        return response;
    }
    finally
    {
        CreateDependencyTelemetry(correlationId, _inner.ResolvedServicePartition.ServiceName.AbsoluteUri, startTime, timer.Elapsed, response != null, _inner.ResolvedServicePartition.ServiceName.AbsoluteUri, response == null ? "400" : "200");
    }
}

private static string SetCorrelationId(IServiceRemotingRequestMessage requestMessage)
{
    string correlationId;

    if (Activity.Current != null)
        correlationId = Activity.Current.RootId;
    else
        correlationId = (string)CallContext.GetData(Constants.CorrelationId);

    requestMessage.GetHeader().AddHeader(Constants.CorrelationId, Encoding.ASCII.GetBytes(correlationId));

    return correlationId;
}

private void CreateDependencyTelemetry(string correlationId,string target, DateTime startTime, TimeSpan duration, bool success, string name, string resultCode = "200")
{
    var dependencyTelemetry = new DependencyTelemetry();
    dependencyTelemetry.Context.Operation.Id = correlationId;
    dependencyTelemetry.Type = "ServiceFabricServiceRemoting";
    dependencyTelemetry.ResultCode = resultCode; //TODO: Create better result codes?
    dependencyTelemetry.Name = name; //TODO: Provide specific method name
    dependencyTelemetry.Success = success;
    dependencyTelemetry.Duration = duration;
    dependencyTelemetry.Timestamp = startTime;
    dependencyTelemetry.Target = target;

    _telemetryClient.TrackDependency(dependencyTelemetry);
}
公共异步任务
RequestResponseAsync(IServiceRemotingRequestMessage requestMessage)
{
var correlationId=SetCorrelationId(requestMessage);
IServiceRemotingResponseMessageResponse=null;
var startTime=DateTime.UtcNow;
var timer=Stopwatch.StartNew();
尝试
{
response=wait_inner.RequestResponseAsync(requestMessage);
timer.Stop();
返回响应;
}
最后
{
CreateDependencyTelemetry(correlationId,_-inner.ResolvedServicePartition.ServiceName.AbsoluteUri,startTime,timer.Passed,response!=null,_-inner.ResolvedServicePartition.ServiceName.AbsoluteUri,response==null?“400”:“200”);
}
}
私有静态字符串SetCorrelationId(IServiceRemotingRequestMessage requestMessage)
{
字符串相关ID;
如果(Activity.Current!=null)
correlationId=Activity.Current.RootId;
其他的
correlationId=(string)CallContext.GetData(Constants.correlationId);
requestMessage.GetHeader().AddHeader(Constants.CorrelationId,Encoding.ASCII.GetBytes(CorrelationId));
返回相关ID;
}
私有void CreateDependencyTelemetry(字符串相关ID、字符串目标、日期时间开始时间、时间跨度持续时间、布尔成功、字符串名称、字符串结果代码=“200”)
{
var dependencyTelemetry=新dependencyTelemetry();
dependencyTelemetry.Context.Operation.Id=correlationId;
dependencyTelemetry.Type=“ServiceFabricserviceMoting”;
dependencyTelemetry.ResultCode=ResultCode;//TODO:是否创建更好的结果代码?
dependencyTelemetry.Name=Name;//TODO:提供特定的方法名称
dependencyTelemetry.Success=成功;
dependencyTelemetry.持续时间=持续时间;
dependencyTelemetry.Timestamp=startTime;
dependencyTelemetry.Target=目标;
_telemetryClient.TrackDependency(dependencyTelemetry);
}
这将生成依赖项跟踪日志,其中依赖项的名称如下所示: 结构:/ProjectName/ServiceName

我想让它看起来像这样: 结构:/ProjectName/Servicename/ServiceMethodName

我有无状态服务,如果这会有所不同的话


非常感谢您提供的任何帮助

您可以自己构建或使用它(它目前处于测试阶段,但迄今为止做得很好)。在leat,您可以使用它来了解他们是如何做的。我确实使用了这个(beta)包,当我从WebApi中调用服务结构服务时,我确实会将依赖项调用记录到application insights中,并记录特定的方法名。但是,当我从另一个服务结构服务中直接调用服务结构服务时,不会记录任何内容。您连接了正确的模块吗?请参阅以获取示例)(通过调用
newservicemonitor().Start(Context);
来使用它,例如,在服务的
RunAsync
中。谢谢!这似乎很有效。