0

我有三个项目:My.Business、My.WebSite 和 My.WebService

我需要我的日志记录类能够识别来自网站和网络服务的请求。我曾经让 Web 服务作为网站下方的单独应用程序运行,所以我只使用不同的配置文件,效果很好。但我现在希望 Web 服务在同一个应用程序下运行。

如果我能确定请求是来自 My.WebSite 还是来自 My.WebService,我会做好准备,但我不知道该怎么做。

  • Assembly.GetExecutingAssembly() 返回 My.Business
  • Assembly.GetEntryAssembly() 为空
  • 我可以检查 StackTrace,但这似乎很草率,我该怎么回去?特别是因为日志记录可能由最初从其他项目之一调用的 My.Business 中的代码触发。

由于 Web 服务请求以“.asmx”结尾,因此以下概念有效,但感觉不对。

return HttpContext.Current.Request.Path.IndexOf(".asmx") >= 0 ? "My.WebService" : "My.WebSite";

谢谢!

4

2 回答 2

1

您应该能够使用 Assembly.GetCallingAssembly():

return Assembly.GetCallingAssembly().FullName;

这将返回调用当前执行方法的程序集,因此您可以捕获以这种方式调用 My.Business 程序集的任何人。

话虽如此,我倾向于同意 Meirion Hughes 的上述评论。您可能想考虑将所需的任何信息传递给您的日志记录类,特别是如果将来可能在更多应用程序中使用它。

于 2013-09-13T22:38:10.777 回答
0

this.GetType().Assembly.FullName将为您提供当前类的程序集名称。

于 2013-09-13T22:24:42.410 回答