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

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

.NET Core の WCF クライアントがサポートしていないセキュリティモードで使用できないときの代替として SimpleSoapClient を使います。

今現在、.NET Core の WCF クライアントライブラリは、メッセージレベルのセキュリティをサポートしていないため、Visual Studio 2017 で「接続済みサービスの追加」から 'WCF Web Service Reference' を選択してもエラーとなり追加できません。Svcutil.exe で生成したコードを使用してもエラーになります。

System.PlatformNotSupportedException: 'The value 'TransportWithMessageCredential' is not supported in this context for the binding security property 'securityMode'.'

WCF クライアントの代わりに SimpleSoapClient を使いましょう。使い方は Tutorial を見るか、名前通りのシンプル構成なのでソースからパット見わかります。

ただ、問題となるのはこれまで自動生成してくれていた ServiceClient やデータクラスを自前で用意しなくてはいけません。それに加えて接続に必要なヘッダーや、シリアライズ/デシリアライズで必要なネームスペースも必要です。特にコード上に出てこないネームスペースもあるので Fiddler などのパケットキャプチャーで調べましょう。

あと、サービスがオレオレ証明書を使っているときは、System.Net.Http.WinHttpException が発生するので、その回避策も忘れずに。

var handler = new HttpClientHandler
{
    // サーバー証明書の検証をスキップする
    ServerCertificateCustomValidationCallback = (_, __, ___, ____) => true,
};
using (var client = SoapClient.Prepare(handler))
{
    ...
}

コメント

このブログの人気の投稿