ちょっとプログラムミスしていて、StreamReaderのコンストラクタでフォルダ名を渡していました(この時点では気づいていない)。StreamReaderコンストラクタを通過すると、UnauthorizedAccessExceptionが発生。ちょうど運の悪いことに、WCFのメソッド内だったので、「あれ、偽装間違えている?」とあらぬ方向に突き進む羽目に。結構長い間調べて、「これファイルパスじゃなくて、フォルダ名渡しているじゃないか」と気づきました…はずかしい。
StreamReaderのコンストラクタではこの例外が発生するって書かれていなかったので、てっきりセキュリティ例外だと思ってかなり悩んでしまいました。皆様も気を付けましょう。
WCFとnetTCPBindingでも悩まされたのですが、またそれは別の話。もうあきらめました…。素直にbasicHttpBinding使います。