39511


タイトルの件、WCFサービスがクライアントからアクセスされた際のログ出力をWCFサービス毎に同じファイルに出力する事を考えています。  
この時、同時に異なるクライアントから同じWCFサービスにアクセスがあると、どのクライアントからのアクセスログなのか区別がつかなくなることが想定されます。  
区別したい場合、WCFサービス上でクライアントのIPアドレスやWCFのサービススレッド番号等をログに出力する事を考えてますが、WCFサービス上でクライアントのIPアドレスやWCFサービスの処理スレッド番号は取得可能でしょうか？  
また、この機能を満たしたい場合、他にノウハウ等ご存知でしたらご教示下さい。  
よろしくお願い致します。


CC BY-SA 3.0
2017-11-11T14:58:45.237
39505
2017-11-12T04:18:42.860
9228
question
c# wcf
c# IIS上でのWCFサービスのログ出力でクライアントアクセスの区別をしたい


> クライアントのIPアドレス

`RemoteEndpointMessageProperty`や[ASP.NET 互換モード](https://msdn.microsoft.com/ja-
jp/library/aa702682\(v=vs.110\).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)で取得できます。

前者の場合は

[code]

    var props = OperationContext.Current
                     .IncomingMessageProperties[RemoteEndpointMessageProperty.Name]
                      as RemoteEndpointMessageProperty;
    // props.Address
    // props.Port
    
[/code]

で、後者はリンク先の設定をしたうえで`HttpContext.Current.Request.UserHostAddress`で取得可能です。

> WCFサービスの処理スレッド番号

通常どおり`Thread.CurrentThread.ManagedThreadId`で取得できます。


CC BY-SA 3.0
2017-11-12T04:18:42.860
39511
2017-11-12T04:18:42.860
5750
39505
answer