スキップしてメイン コンテンツに移動

メッセージレベルのセキュリティを使用した WCF サービスを .NET Core アプリケーションから呼び出す方法

.NET Core の WCF クライアントがサポートしていないセキュリティモードで使用できないときの代替として SimpleSoapClient を使います。
今現在、.NET Core の [WCF](https://github.com/dotnet/wcf) クライアントライブラリは、メッセージレベルのセキュリティをサポートしていないため、Visual Studio 2017 で「接続済みサービスの追加」から 'WCF Web Service Reference' を選択してもエラーとなり追加できません。Svcutil.exe で生成したコードを使用してもエラーになります。 ```cmd System.PlatformNotSupportedException: 'The value 'TransportWithMessageCredential' is not supported in this context for the binding security property 'securityMode'.' ``` WCF クライアントの代わりに [SimpleSoapClient](https://github.com/gravity00/SimpleSOAPClient) を使いましょう。使い方は [Tutorial](https://github.com/gravity00/SimpleSOAPClient/wiki/Tutorial) を見るか、名前通りのシンプル構成なのでソースからパット見わかります。 ただ、問題となるのはこれまで自動生成してくれていた ServiceClient やデータクラスを自前で用意しなくてはいけません。それに加えて接続に必要なヘッダーや、シリアライズ/デシリアライズで必要なネームスペースも必要です。特にコード上に出てこないネームスペースもあるので [Fiddler](https://www.telerik.com/fiddler) などのパケットキャプチャーで調べましょう。 あと、サービスがオレオレ証明書を使っているときは、System.Net.Http.WinHttpException が発生するので、その回避策も忘れずに。 ```csharp var handler = new HttpClientHandler { // サーバー証明書の検証をスキップする ServerCertificateCustomValidationCallback = (_, __, ___, ____) => true, }; using (var client = SoapClient.Prepare(handler)) { ... } ```

コメント

このブログの人気の投稿