سؤال

ونحن نستخدم خدمة WCF

وعلى جانب العميل ونحن نخطط لإغلاق صراحة اتصال ويبدو أن هناك طريقة أكثر من واحد من إغلاق

وSample1: في كتلة أخيرا من استخدام استهلاك خدمة WCF

if (client.State == CommunicationState.Faulted)
{
  client.Abort();
}
client.Close();

ومنذ إذا كانت الخدمة في حالة خطأ ونحن لن تكون قادرا على الاتصال قريب ()

وSample2:

using(ClientProxy proxy = new ClientProxy())
{   
  //call your service methods
}

وفي sample2 لست متأكدا ما سيحدث إذا كانت الخدمة في حالة الخطأ، وسوف رمي خطأ إغلاق اتصال؟

هل كانت مفيدة؟

المحلول

والعينة 2ND باستخدام "باستخدام" كتلة غير صحيحة. كتلة باستخدام يضمن أن يتم استدعاء الأسلوب التخلص على الكائن الوكيل. أسلوب التخلص بدوره باستدعاء أسلوب انهيار والتي سوف (محاولة) الاتصال بالخدمة التي سوف يرمي استثناء عند انتقد في حالة الاتصال. حتى مشاعرك / حدس على حق تماما. وسيكون لطيفا لو الوكيل التخلص طريقة استخدام رمز من العينة الأولى ولكن لا حتى لا تستخدم الكتلة باستخدام:)

نصائح أخرى

لديك كل المعلومات اللازمة في متناول اليد - وأفضل الممارسات مما أدى إلى استخدام وعلى مقربة صحيح / إجهاض أن كل ما تبذلونه من وكلاء عميل WCF على النحو التالي:

YourClientProxy clientProxy = new YourClientProxy();

try
{
   .. use your service
   clientProxy.Close();
}
catch(FaultException)
{
   clientProxy.Abort();
}
catch(CommunicationException)
{
   clientProxy.Abort();
}
catch (TimeoutException)
{ 
   clientProxy.Abort();
}

واصطياد FaultException يتعامل مع جميع الحالات responsded الخدمة مع حالة خطأ (وبالتالي قناتك في حالة انتقد)، وسوف CommunicationException التعامل مع جميع الاستثناءات المتعلقة الاتصال الأخرى التي يمكن أن تحدث، مثل الاتصال بالشبكة اسقاط الخ

وسوف النهج مع استخدام كتلة () لا يعمل، لأنه إذا حدث استثناء في نهاية الكتلة، عند استدعاء الأسلوب التخلص () أسلوب إغلاق () على وكيل العميل، لديك أي وسيلة لل صيد والتعامل مع ذلك.

في جوفال لووي الممتازة <لأ href = "http://books.google.co.uk/books؟id=xE3VqWUgDWEC&pg=PT279&lpg=PT279&dq=Juval+Lowy+proxy+abort&source=bl&ots=3_mIm53_QI&sig=g_187GZ7EKNEB91UdPqZJxoZKpA&hl=en&ei= GRKoStGpPKbKjAe5vsG7CA وسا = X & منظمة اوكسفام الدولية = book_result وط = يؤدي وresnum = 1 # ت = onepage وف = & F = كاذبة "يختلط =" نوفولو noreferrer "> البرمجة WCF كتاب فإنه يوصي:

try 
{
    ClientProxy clientProxy = new ClientProxy();
    clientProxy.SomeMethod();
    clientProxy.Close();
}
catch
{
    proxy.Abort();
}

استخدم عينة 1

وهنا هو مادة جيدة لماذا يجب عدم استخدام باستخدام:

http://msdn.microsoft.com/en-us/library /aa355056.aspx

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top