كيف يمكنني التأكد من أن مجموعة WCF متاح قبل أن استخدام قناة من عميل؟

StackOverflow https://stackoverflow.com/questions/1078037

سؤال

وأنا خلق خدمة ويندوز الذي يبدأ عدد من العمليات الرقيق. في كل من هذه العملية الرقيق أبدأ الاستماع على إخراج مسمى لرسالة من عملية الرئيسي.

ولدي حاليا الوضع الذي يستدعي عملية سيد عبدا عبر الأنابيب اسمه قبل بدء العبد بالكامل وتبدأ الاستماع على إخراج مسمى.

    ProcessStartInfo processStartInfo = new ProcessStartInfo("slave");
    processStartInfo.Arguments = Address 

    Process process = new Process();
    process.StartInfo = processStartInfo;

    process.Start();

    base.Endpoint.Binding = new NetNamedPipeBinding(NetNamedPipeSecurityMode.None);
    base.Endpoint.Address = Address;

    base.Channel.RemoteMethod();

إذا أفعل ذلك قناة يحصل في CommunicationState.Faulted وأي دعوات لاحقة على قناة تفشل أيضا.

وماذا يمكنني أن أفعل للتحقق من سيد أن عملية الرقيق يبدأ الاستماع؟ أو كيف يمكنني استعادة من CommunicationState.Faulted لإعادة المحاولة دعوتي النائية؟

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

المحلول

والطريقة الوحيدة لاسترداد من الدولة انتقد هي reiniailize عميل WCF من خلال بناء إعادة المثيل واستدعاء الأسلوب المفتوحة ().

في عام، قبل أن استدعاء الخدمة، ودائما تحقق الخاصية الحالة، وإذا لم يتم فتحه أحاول تهيئة ذلك كما وصفت أعلاه. اذا فشلت، هناك مشكلة مع الخادم. (في حالتي، ويحصل انتقد الدولة بسبب عدم النشاط، وبالتالي تهيئة succedes Ussually ل)

نصائح أخرى

ويمكنك إرفاق إلى الحدث "ServiceFaulted" على المضيف، واستخدام هذا لإجراء معالجة الأخطاء. استنادا إلى وثائق، والعمل الصحيح هو لإجهاض المضيف. يمكنك ثم محاولة reinitialise ذلك، ولكن قد يكون ضربا من العبث إذا كان النظام هو أسفل.

وربما يمكنك تنفيذ "جلسة" الخدمات القائمة. حتى يفتح العميل القناة WCF ويجعل الدعوة إلى فتح دورة (على سبيل المثال مكالمة "فتح"). وهذا من شأنه السماح المضيف يعرفون أن العبد يصغي.

وقد ترغب في التحقيق في آلية الاستدعاء من WCF بحيث يتم توفير الاتصال عن بعد للعبد عن طريق الاستدعاء من استدعاء "فتح" التي أدلى بها لمرة واحدة وinitialised ذلك.

وأليكس Drenea هو الصحيح في قوله الذي تريد إنشاء مثيل جديد. أوصي وجود نظرة على الطبقة ChannelFactory في WCF لخلق الوكلاء. يمكنك استخدام هذا مع بعض المحاولة السلوك نوع الصيد للتعامل مع بدء التشغيل الأولي لعبدك. قد تحتاج أيضا إلى وضع System.Diagnostics.Debugger.Break () في رمز بدء التشغيل عملية عبدك كما المصحح قد لا نعلق حتى لم تشاهد الاستثناء في عملية عبدك.

هل لي أن أسأل ما إذا كنت حقا بحاجة الى عزل العملية أو أن تستخدم التزامن والمواضيع تكون كافية لمهمتكم؟

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