私のアプリケーションでは、WCF 呼び出し/チャネルの Close() でエラーが発生することがあることがわかりました。そして、私はこのテーマについて少し調査を行い、インターネットでいくつかのコードを借りて始めました。
そして今、これは正しい方法なのだろうか?または、ソリューションを改善するか、まったく異なるものを実装する必要がありますか?
ジェネリック クラス/静的クラス:
public class SafeProxy<Service> : IDisposable where Service : ICommunicationObject
{
private readonly Service _proxy;
public SafeProxy(Service s)
{
_proxy = s;
}
public Service Proxy
{
get { return _proxy; }
}
public void Dispose()
{
if (_proxy != null)
_proxy.SafeClose();
}
}
public static class Safeclose
{
public static void SafeClose(this ICommunicationObject proxy)
{
try
{
proxy.Close();
}
catch
{
proxy.Abort();
}
}
}
これは私がWCFを呼び出す方法です:
(WCFReference は、WCF サービス アドレスを指すサービス参照です)
using (var Client = new SafeProxy<WCFReference.ServiceClient>(new WCFReference.ServiceClient()))
{
Client.Proxy.Operation(info);
}