Question

J'ai un projet ASP.net qui consiste à utiliser une coutume IHttpModule. Ce module siégera dans le pipeline et lorsque certains critères correspondent, il doit invoquer une méthode sur un service WCF hébergé dans une application simple console C # sur la même machine.

Le code pour le module ci-dessous:

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();
            }
        }        
    }
}

Mon problème est que cela va la première fois, mais les tentatives ultérieures provoquent ce message d'erreur

L'objet de communication, System.ServiceModel.Channels.ServiceChannel, ne peut pas être utilisé pour la communication car il est dans l'état Faulted.

Il semble que si je fais quelque chose de mal, et je suis de nouveau à WCF en général si cela est très probable.

Je pense que la question entoure le ChannelFactory étant recréée, et cela provoque l'état de défaut.

Était-ce utile?

La solution

L'erreur spécifique signifie probablement l'usine en défaut, a lancé une exception (laquelle vous AVALER), puis lorsque le bloc finally exécute, l'appel factory.Close () échoue parce que l'usine est en défaut (si un objet WCF est en défaut , vous devez appeler Abort () à ce sujet, pas Close ()).

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top