.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))
{
...
}
コメント
コメントを投稿