質問: タイトルの件、WCFサービスがクライアントからアクセスされた際のログ出力をWCFサービス毎に同じファイルに出力する事を考えています。 この時、同時に異なるクライアントから同じWCFサービスにアクセスがあると、どのクライアントからのアクセスログなのか区別がつかなくなることが想定されます。 区別したい場合、WCFサービス上でクライアントのIPアドレスやWCFのサービススレッド番号等をログに出力する事を考えてますが、WCFサービス上でクライアントのIPアドレスやWCFサービスの処理スレッド番号は取得可能でしょうか? また、この機能を満たしたい場合、他にノウハウ等ご存知でしたらご教示下さい。 よろしくお願い致します。
回答: > > クライアントのIPアドレス > > > `RemoteEndpointMessageProperty`やASP.NET 互換モード.aspx#WCF%20%E3%82%B5%E3%83%BC%E3%83%93%E3%82%B9%E3%82%92%20ASP.NET%20%E4%BA%92%E6%8F%9B%E3%83%A2%E3%83%BC%E3%83%89%E3%81%A7%E6%8F%90%E4%BE%9B%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95)で取得できます。 前者の場合は ``` var props = OperationContext.Current .IncomingMessageProperties[RemoteEndpointMessageProperty.Name] as RemoteEndpointMessageProperty; // props.Address // props.Port ``` で、後者はリンク先の設定をしたうえで`HttpContext.Current.Request.UserHostAddress`で取得可能です。 > > WCFサービスの処理スレッド番号 > > > 通常どおり`Thread.CurrentThread.ManagedThreadId`で取得できます。