Frage

Ich habe ein ASP.NET -Projekt, bei dem ein benutzerdefiniertes IHTTPModule verwendet wird. Dieses Modul befindet sich in der Pipeline und sollte bei bestimmten Kriterien eine Methode auf einem WCF -Dienst aufrufen, das in einer einfachen C# -Konsole -Anwendung auf demselben Computer gehostet wird.

Der Code für das Modul ist unten:

using System;
using System.Collections.Generic;
using System.Text;
using System.Web.SessionState;
using System.Web;
using System.Diagnostics;
using System.IO;
using System.Runtime.Serialization.Formatters.Binary;
using System.Configuration;
using System.ServiceModel;
using SimpleFarmStateServer;

namespace SimpleFarm
{
    public class SimpleFarmModuleSS : IHttpModule, IRequiresSessionState
    {
        protected string cache_directory = "";

        // WCF
        ChannelFactory<IStateServer> factory;
        IStateServer channel;

        public void Dispose() { }

        public void Init(System.Web.HttpApplication context)
        {            
            context.PreRequestHandlerExecute += new EventHandler(context_PreRequestHandlerExecute);

            setupFactory();
        }

        void setupFactory()
        {
            factory = new ChannelFactory<IStateServer>(
                    new NetNamedPipeBinding(),
                    "net.pipe://localhost/StateServer");
        }

        void context_PreRequestHandlerExecute(object sender, EventArgs e)
        {
            try
            {
                if (factory.State != CommunicationState.Opened)
                    setupFactory();

                channel = factory.CreateChannel();
                channel.LogAccess("Hello World!");
            }
            catch (Exception ex)
            {

            }
            finally
            {
                factory.Close();
            }
        }        
    }
}

Mein Problem ist, dass dies das erste Mal ausgeführt wird, aber nachfolgende Versuche diese Fehlermeldung verursachen

Das Kommunikationsobjekt System.Servicemodel.Channels.servicechannel kann nicht für die Kommunikation verwendet werden, da es sich im fehlerhaften Zustand befindet.

Es scheint, als würde ich etwas falsch machen, und ich bin im Allgemeinen neu bei WCF, also ist das sehr wahrscheinlich.

Ich denke, das Problem umgibt den Channelfactory, das nachgebildet wird, und dies verursacht den fehlerhaften Zustand.

War es hilfreich?

Lösung

Der spezifische Fehler bedeutet wahrscheinlich, dass die fehlerhafte Fabrik eine Ausnahme (die Sie schlucken) und dann, wenn der Block endgültig ausgeführt wird, fehlschlägt die Fabrik. abort () darauf aufzurufen, nicht in der Nähe ()).

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top