0

My.Business、My.WebSite、My.WebService の 3 つのプロジェクトがあります。

要求が Web サイトから行われたときと Web サービスから行われたときを識別できるようにするには、ログ クラスが必要です。以前は、Web サービスを Web サイトの下で別のアプリケーションとして実行していたので、別の構成ファイルを使用するだけで問題なく動作しました。しかし、Web サービスを同じアプリケーションの下で実行したいと考えています。

リクエストが My.WebSite からのものか、My.WebService からのものかがわかれば問題ありませんが、その方法がわかりません。

  • Assembly.GetExecutingAssembly() は My.Business を返します
  • Assembly.GetEntryAssembly() が null です
  • 私は StackTrace をチェックできましたが、それはずさんなようで、どうやって戻る必要がありますか? 特に、他のプロジェクトの 1 つから最初に呼び出された 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 に答える