2016-05-05 4 views
1

と呼ばれる取得機能を中止両方: -WCFサービスのプロキシ - クローズ()と私はWCFプロキシを呼び出すために以下のコードを持って

var client = new ServiceClientProxy(); 

try 
{ 

    var documents = client.GetDocuments(); 
    client.Close(); 

    if(documents.Length > 50) 
    { 
    throw new Exception("Too many Documents"); 
    } 

    else if(documents.Length <10) 
    { 
    throw new Exception("Too many Documents"); 
    } 

    else 
    { 
    return documents; 
    } 

} 

catch(exception ex) 
{ 
    client.Abort(); 
} 

ここで文書は、我々はサービスから取得することを数える場合は50以上かでありますその場合は、Close()とクライアントのAbort関数の両方を呼び出すことになります.WCFサービスプロキシを呼び出すこの期待された方法はありますか? これを処理するより良い方法があれば誰でもお勧めします。

また、コール直後にクライアント接続を閉じる方が良いか、応答プロパティを完全に使用し終わりに接続を閉じるまで待つ必要がありますか?

+1

この記事はお役に立ちます。 https://relentlessdevelopment.wordpress.com/2010/01/17/closing-a-wcf-client-the-properway/ – vercin

+0

インデントを修正してください。 –

+0

ありがとうございました。リンクのaticleにwcfを閉じる方法についての情報があります。しかし、私の問題は、コード自体によって例外がスローされた場合、終了関数の後にアボート関数が呼び出されていることです。 – Vishnu

答えて

1

また、すぐにコールした後、クライアント接続 を閉じるためのより良い方法であるか、我々は我々が 完全に使用される応答特性を有しまで待つと 最後に接続を終了する必要がありますか?

サービスを後で呼び出す必要があるかどうかによって異なります。そうでない場合は、必ず接続を閉じてください。

これはWCFサービスプロキシを呼び出す予定の方法ですか?誰でも は、これを処理するいくつかのより良い方法がある場合はお勧めします。あなたが本当に「なぜ私は非常にこのシリーズを読んで推薦を理解したい場合は

Documents documnts = null; 

    try 
    { 
      var client = new ServiceClientProxy(); 
      documents = client.GetDocuments(); 
    } 
    finally 
    { 
     try 
     { 
      if (client.State != CommunicationState.Closed) 
       client.Close(); 
      } 
      catch 
      { 
      client.Abort(); 
      }; 
    }; 

    if (documents.Length > 50) 
    { 
     throw new Exception("Too many Documents"); 
    } 
    else if (documents.Length < 10) 
    { 
     throw new Exception("Too many Documents"); 
    } 
    else 
    { 
     return documents; 
    } 

:あなたが実際にこのような構造にしなければならない可能性がWCFに焼かれる問題を処理するために

号記事の彼らは問題のクローズ/アボート部分をクリアします。

http://blogs.msmvps.com/p3net/2014/02/02/a-smarter-wcf-service-client-part-1/ 
http://blogs.msmvps.com/p3net/2014/02/09/a-smarter-wcf-service-client-part-2/ 
http://blogs.msmvps.com/p3net/2014/02/23/a-smarter-wcf-service-client-part-3/ 
http://blogs.msmvps.com/p3net/2014/03/15/a-smarter-wcf-service-client-part-4/ 

あなたが提供したコードで指摘しておかなければならないもう1つの点は、例外的なものでなければならない例外です。

私がビジネスロジックと考えているものの例外を使用するのは、通常、適切なことではありません。代わりに構造化された結果を返すアプローチを考えてみましょう。おそらくあなたの場合にはそれは理にかなっています。

HTH

+0

ありがとうスティーブン。もう1つの疑問があります。クライアントでcloseを呼び出してから、同じクライアントでabortを呼び出すと、例外またはエラーが発生しますか? – Vishnu

+1

実行中のコードがあるので、試しても何も止まっていないと思います。 –

関連する問題