2016-05-05 4 views
1

У меня есть следующий код, чтобы позвонить в WCF прокси: -службы WCF прокси - И Close() и Abort функции вызывался

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 или менее 10, в этом случае мы будем вызывать как Close(), так и функции Abort на client.Is это ожидаемый способ вызова прокси-сервера службы WCF? Любой, пожалуйста, предложите, если есть лучший способ справиться с этим.

Также это лучший подход для закрытия клиентского соединения сразу после вызова или нам нужно подождать, пока мы полностью не применим свойства ответа и не закроем соединение в конце?

+1

Эта статья может вам помочь. https://relentlessdevelopment.wordpress.com/2010/01/17/closing-a-wcf-client-the-proper-way/ – vercin

+0

Вы можете исправить отступы, пожалуйста? –

+0

Спасибо vercin.The aticle в ссылке имеет информацию о том, как закрыть wcf. Но моя проблема в том, что исключение выбрасывается самим кодом, тогда функция abort вызывается после функции закрытия. Это вызывает любую проблему? – Vishnu

ответ

1

Также это лучший подход, чтобы закрыть соединение клиента сразу после вызова или мы должны ждать, пока мы полностью использовали свойство отклика и закрыть соединение в конце?

В зависимости от того, если вам необходимо сделать последующие звонки в службу. Если нет, то все это закрывает соединение.

Является ли этот ожидаемый способ вызова прокси-сервера службы WCF? Любой, пожалуйста, предложите, если есть лучший способ справиться с этим.

No. Чтобы справиться с проблемой, которая выпекается в 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; 
    } 

Если вы действительно хотите понять «почему» я настоятельно рекомендую прочитать эту серию статей. Они очистят часть Close/Abort вашей проблемы.

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/ 

Еще одно другое, что я должен указать с кодом, который вы предоставили, - исключения должны быть исключительными.

Использование исключений для того, что я считал бы бизнес-логикой, обычно непрактично. Рассмотрим подход, в котором вместо этого вы возвращаете структурированный результат. Возможно, в вашем случае это имеет смысл.

HTH

+0

Большое спасибо Стивен. У меня есть еще одно сомнение. Мы получаем какое-либо исключение или ошибку, если сначала вызываем клиента, а затем вызываем прерывание на том же клиенте? – Vishnu

+1

У вас есть действующий код, поэтому я предполагаю, что вы не пытаетесь его попробовать. –

 Смежные вопросы

  • Нет связанных вопросов^_^