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