有没有一种优雅的方法来从MessageInspector/AuthorizationPolicy /其他扩展点获取将在服务实例上执行的方法?我可以用
OperationContext.Current.IncomingMessageHeaders.Action
但我希望有一些方法可以做到这一点,而无需手动匹配SOAP操作与OperationContracts.
我要做的是在执行之前检查方法的属性.
我IClientMessageInspector在我的应用程序中实现了"拦截"传出Web服务调用.是否有可能找出哪些操作正在从内部被称为BeforeSendRequest和AfterReceiveReply?
这里有一个类似的问题,如何在WCF消息检查器中获取调用的操作名称,该命令用于服务器端(接收请求的一方).我尝试做类似的事情,例如
public object BeforeSendRequest(ref Message request, IClientChannel channel)
{
var v = OperationContext.Current.OutgoingMessageProperties["HttpOperationName"];
return null;
}
public void AfterReceiveReply(ref Message reply, object correlationState)
{
var v = OperationContext.Current.OutgoingMessageProperties["HttpOperationName"];
}
Run Code Online (Sandbox Code Playgroud)
但在传出请求期间,似乎OperationContext.Current为null,所以我不能使用它.知道如何获得它吗?知道怎么干净利落(相反,解析SOAP xml)?
有没有办法配置 App Insights 在监视 WCF 服务时收集操作名称?所有请求都被 URL 集中在一起(它们只是以 .svc 结尾的 POST),因此没有简单的方法来确定对服务调用了哪个特定操作。
是否需要一个自定义的遥测初始化程序,可以以某种方式确定实际调用了哪个操作并设置自定义属性?如果是这样,您如何确定当前的 WCF 操作名称?