組み込み Linux を実行するデバイス (たまたま Pelco ブランドのビデオ ドーム) の SOAP サービスに対する VS2010 Dotnet 4.0 クライアントを開発しています。デバイスの SOAP サーバーを制御できません。ベンダーは、サービス参照として正しくロードする WSDL ファイルを提供しています。
これを理解するために、コマンド ライン デスクトップ クライアントを使用しています (コードをサービスに移行する前に)。
少し単純化すると、さまざまなサービスの SOAP 呼び出しは次のような形式になります。
service.SetPosition(pan,tilt,zoom)
var pos = service.GetPosition();
など。それらは基本的に機能し、期待されていることを行います。
問題は次のとおりです。ときどき断続的に、私が (まだ) 理解していないパターンで、これらのサービス呼び出しのランダムな 1 つが CommunicationException をスローし、その Message は
The underlying connection was closed: A connection that was
expected to be kept alive was closed by the server.
サービス オブジェクトを作成する方法は次のとおりです。
var binding = new System.ServiceModel.BasicHttpBinding();
uri = new Uri(/*the correct uri for the service*/);
address = new System.ServiceModel.EndpointAddress(u);
service = new PositioningControlPortTypeClient(binding, address);
この場合、PositioningControlPortTypeClient
WSDL をサービス参照としてロードすると、WSDL を介して定義されます。
dotnet 4.0 / wcf / soap に HTTP/1.0 を強制的に使用させる方法はありますか?
サービス クライアントがこの例外をスローする前に、この例外をスローしようとしていることを検出する方法はありますか?
各サービス オブジェクトを 1 回だけ使用してから破棄する必要がありますか?
他に知恵は?