7 Stimmen

eine unbehandelte Ausnahme den WCF-Dienst zum Absturz bringt?

Ich möchte wissen, ob eine unbehandelte Ausnahme den WCF-Dienst zum Absturz bringt. Ich habe das folgende Programm geschrieben, das zeigt, dass eine unbehandelte Ausnahme in einem Thread, der vom WCF-Dienst gestartet wurde, den gesamten WCF-Dienst zum Absturz bringt.

Meine Frage ist, ich möchte bestätigen, ob unbehandelte Ausnahme in Threads (gestartet von WCF-Dienst) WCF zum Absturz bringen wird? Meine Verwirrung ist ich denke WCF sollte stabilen Dienst, der nicht wegen unbehandelten Ausnahme abstürzen sollte.

Ich verwende VSTS 2008 + C# + .Net 3.5, um einen selbst gehosteten Windows Service-basierten WCF-Dienst zu entwickeln.

Hier sind die entsprechenden Teile des Codes,

namespace Foo
{
    // NOTE: If you change the interface name "IService1" here, you must also update the reference to "IService1" in Web.config.
    [ServiceContract]
    public interface IFoo
    {
        [OperationContract]
        string Submit(string request);
    }
}

namespace Foo
{
    // NOTE: If you change the class name "Service1" here, you must also update the reference to "Service1" in Web.config and in the associated .svc file.
    public class FooImpl : IFoo
    {
        public string Submit(string request)
        {
            return String.Empty;
        }
    }
}

namespace Foo
{
    public partial class Service1 : ServiceBase
    {
        public Service1()
        {
            InitializeComponent();
        }

        ServiceHost host = new ServiceHost(typeof(FooImpl));

        protected override void OnStart(string[] args)
        {
            host.Open();
            // start a thread which will throw unhandled exception
            Thread t = new Thread(Workerjob);
            t.Start();
        }

        protected override void OnStop()
        {
            host.Close();
        }

        public static void Workerjob()
        {
            Thread.Sleep(5000);
            throw new Exception("unhandled");
        }
    }
}

2 Stimmen

Ihr Beispiel zeigt nicht "unbehandelte Ausnahme in einem vom WCF-Dienst gestarteten Thread", sondern "unbehandelte Ausnahme in einem vom Windows-Dienst gestarteten Thread". Das hat nichts mit WCF zu tun.

0 Stimmen

Ich starte WCF selbst Host in Windows Service (host.Open()), die ich unbehandelte Ausnahme in WCF-Dienst bedeuten. Sorry für den verwirrenden Begriff, und alle Kommentare oder Antworten auf meine Frage?

1voto

Juan Pablo 1982 Punkte 11

Sie können Folgendes nutzen FaultException um Fehler an die Client-Seite zu übermitteln und die Logik im Dienst zu behalten.

Prüfen Sie dies Beispiel Ich hoffe, es hilft Ihnen.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X