IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Windows Communication Foundation .NET Discussion :

La connexion sous-jacente a été fermée : La connexion a été interrompue de manière inattendue.


Sujet :

Windows Communication Foundation .NET

  1. #1
    Membre régulier
    Inscrit en
    Décembre 2004
    Messages
    157
    Détails du profil
    Informations personnelles :
    Âge : 42

    Informations forums :
    Inscription : Décembre 2004
    Messages : 157
    Points : 123
    Points
    123
    Par défaut La connexion sous-jacente a été fermée : La connexion a été interrompue de manière inattendue.
    Bonjour,

    J'ai fait un petit service comportant 6 projets :

    L'application WinForm
    Librairie Bo
    Librairie Outils divers
    ServiceFactory
    ServiceInterfaceFactory
    WebApplication

    J'ai donc le Winform qui dépend de Bo, Outil et ServiceInterfaceFactory.

    WebApplication qui dépend de Bo, outil ServiceFactory et ServiceInterfaceFactory.

    J'ai ajouté des références web pour accéder a mes services via mon appli winform.

    Cela fonctionnait très bien jusqu'à ce que je crée un objet.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
        [DataContract]
        public class DataFactory
        {
            [DataMember]
            public List<object> Data { get; set; }
            [DataMember]
            public MtxTools.Enums.eTransactionStatus Statut { get; set; }
        }
    Toutes mes méthodes de service prennent cet objet en entrée et le renvoie en sortie. Ce qui me permet aussi bien de passer un String que 3 liste d'objet.

    Tout ce passe bien du client au serveur mais lorsqu'en pas à pas j'arrive au renvoie de mon objet, j'ai l'exception :
    La connexion sous-jacente a été fermée : La connexion a été interrompue de manière inattendue.


    Ps : je renvoie un objet User ou List<User> dans le data.


    Voici mon Web.config
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
     
    	<system.serviceModel>
    		<behaviors>
    			<serviceBehaviors>
    				<behavior name="MetadataWSDL">
    					<serviceMetadata httpGetEnabled="true"/>
              <serviceDebug includeExceptionDetailInFaults="true" />
              <serviceThrottling
                        maxConcurrentCalls="16"
                        maxConcurrentInstances="2147483647"
                        maxConcurrentSessions="10"/>
            </behavior>
    			</serviceBehaviors>
    		</behaviors>
    		<services>
          <service name="ServiceFactory.ExceptionService" behaviorConfiguration="MetadataWSDL">
            <endpoint address="" binding="basicHttpBinding" contract="ServiceInterfaceFactory.IExceptionService"/>
          </service>
          <service name="ServiceFactory.HabilitationService" behaviorConfiguration="MetadataWSDL">
            <endpoint address="" binding="basicHttpBinding" contract="ServiceInterfaceFactory.IHabilitationService"/>
          </service>
    		</services>
    	</system.serviceModel>
    et mon app.config

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
     
    <system.serviceModel>
        <bindings>
          <basicHttpBinding>
            <binding name="BasicHttpBinding_IExceptionService" maxReceivedMessageSize="2147483647" closeTimeout ="00:00:00">
              <readerQuotas
                  maxDepth="64"
                  maxStringContentLength="2147483647"
                  maxArrayLength="2147483647"
                  maxBytesPerRead="4096"
                  maxNameTableCharCount="16384"/>
              <security mode="None">
                <transport clientCredentialType="None" proxyCredentialType="None"
                  realm="" />
                <message clientCredentialType="UserName" algorithmSuite="Default" />
              </security>
            </binding>
            <binding name="BasicHttpBinding_IHabilitationService" maxReceivedMessageSize="2147483647" closeTimeout ="00:00:00">
              <readerQuotas
                  maxDepth="64"
                  maxStringContentLength="2147483647"
                  maxArrayLength="2147483647"
                  maxBytesPerRead="4096"
                  maxNameTableCharCount="16384"/>
              <security mode="None">
                <transport clientCredentialType="None" proxyCredentialType="None"
                  realm="" />
                <message clientCredentialType="UserName" algorithmSuite="Default" />
              </security>
            </binding>
          </basicHttpBinding>
        </bindings>
        <client>
          <endpoint address="http://localhost:2748/ExceptionService.svc"
            binding="basicHttpBinding" bindingConfiguration="BasicHttpBinding_IExceptionService"
            contract="ExceptionService.IExceptionService" name="BasicHttpBinding_IExceptionService" />
          <endpoint address="http://localhost:2748/HabilitationService.svc"
            binding="basicHttpBinding" bindingConfiguration="BasicHttpBinding_IHabilitationService"
            contract="HabilitationService.IHabilitationService" name="BasicHttpBinding_IHabilitationService" />
        </client>
      </system.serviceModel>
    Merci d'avance pour toutes information.

  2. #2
    Rédacteur
    Avatar de Thomas Lebrun
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    9 161
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 9 161
    Points : 19 434
    Points
    19 434
    Par défaut
    Et au niveau de l'InnerException, tu n'as pas plus d'infos ?

  3. #3
    Membre régulier
    Inscrit en
    Décembre 2004
    Messages
    157
    Détails du profil
    Informations personnelles :
    Âge : 42

    Informations forums :
    Inscription : Décembre 2004
    Messages : 157
    Points : 123
    Points
    123
    Par défaut
    C'est l'innerException, le message de base c'est

    Une exception a été levée par la cible d'un appel.
    Les traces :

    Server stack trace:
    à System.ServiceModel.Channels.HttpChannelUtilities.ProcessGetResponseWebException(WebException webException, HttpWebRequest request, HttpAbortReason abortReason)
    à System.ServiceModel.Channels.HttpChannelFactory.HttpRequestChannel.HttpChannelRequest.WaitForReply(TimeSpan timeout)
    à System.ServiceModel.Channels.RequestChannel.Request(Message message, TimeSpan timeout)
    à System.ServiceModel.Dispatcher.RequestChannelBinder.Request(Message message, TimeSpan timeout)
    à System.ServiceModel.Channels.ServiceChannel.Call(String action, Boolean oneway, ProxyOperationRuntime operation, Object[] ins, Object[] outs, TimeSpan timeout)
    à System.ServiceModel.Channels.ServiceChannel.Call(String action, Boolean oneway, ProxyOperationRuntime operation, Object[] ins, Object[] outs)
    à System.ServiceModel.Channels.ServiceChannelProxy.InvokeService(IMethodCallMessage methodCall, ProxyOperationRuntime operation)
    à System.ServiceModel.Channels.ServiceChannelProxy.Invoke(IMessage message)

    Exception rethrown at [0]:
    à System.Runtime.Remoting.Proxies.RealProxy.HandleReturnMessage(IMessage reqMsg, IMessage retMsg)
    à System.Runtime.Remoting.Proxies.RealProxy.PrivateInvoke(MessageData& msgData, Int32 type)
    à ClientKrusty.HabilitationService.IHabilitationService.GetLogedUser(DataFactory DataOut)
    à ClientKrusty.HabilitationService.HabilitationServiceClient.GetLogedUser(DataFactory DataOut) dans e:\06_projects\2008\clientkrusty\clientkrusty\service references\habilitationservice\Reference.cs:ligne 52

  4. #4
    Membre chevronné
    Profil pro
    Inscrit en
    Février 2005
    Messages
    1 273
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 1 273
    Points : 2 203
    Points
    2 203
    Par défaut
    Par hazard, tu peux nous mettre ton enum ?

    Ca sent la valeur 0 absente....

  5. #5
    Membre chevronné
    Profil pro
    Inscrit en
    Février 2005
    Messages
    1 273
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 1 273
    Points : 2 203
    Points
    2 203
    Par défaut
    Je parle de ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    
            [DataMember]
            public List<object> Data { get; set; }
            [DataMember]
            public MtxTools.Enums.eTransactionStatus Statut { get; set; }

    tu devrais faire attention à avoir "0" prévu tel que par ex:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    public enum eTransactionStatus 
      {
        None=0,
        Pending= 1,
        Ack= 2,
        Shipped = 3
      }

  6. #6
    Membre régulier
    Inscrit en
    Décembre 2004
    Messages
    157
    Détails du profil
    Informations personnelles :
    Âge : 42

    Informations forums :
    Inscription : Décembre 2004
    Messages : 157
    Points : 123
    Points
    123
    Par défaut
    Hélasse, l'enum seul passe très bien.

    J'ai tenté de passer mon DataFactory avec le data initialisé mais sans valeur et l'enum initialisé pour tester et cela fonctionne. (j'ai testé aussi en rajoutant des valeurs dont 0)

    C'est donc vraiment lorsque data à un objet car si j'ajoute à data un string, ça passe. (data est devenu un arrayList).

    Voici un exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
     
    [DataContract]
        [System.Data.Linq.Mapping.Table(Name = "dbo.hab_Group")]
        public class GroupeUtilisateur 
        {
            #region Properties
     
            [DataMember]
            [System.Data.Linq.Mapping.Column(Storage = "Ident", Name = "Ident", DbType = "Int NOT NULL IDENTITY", IsPrimaryKey = true, IsDbGenerated = true, CanBeNull = false)]
            public int Ident
            {
                get;
                set;
            }
     
            [DataMember]
            [System.Data.Linq.Mapping.Column(Storage = "Name", Name = "Name", DbType = "char(60)", CanBeNull = true)]
            public string Name
            {
                get;
                set;
            }
     
            [DataMember]
            [System.Data.Linq.Mapping.Column(Storage = "Description", Name = "Descr", DbType = "char(255)", CanBeNull = true)]
            public string Description
            {
                get;
                set;
            }
            [DataMember]
            [System.Data.Linq.Mapping.Column(Storage = "CreatedByUser", Name = "Creat_User", DbType = "char(20)")]
            public string CreatedByUser
            {
                get;
                set;
            }
     
            [DataMember]
            [System.Data.Linq.Mapping.Column(Storage = "CreationDate", Name = "Creat_Date", DbType = "datetime")]
            public Nullable<DateTime> CreationDate
            {
                get;
                set;
            }
     
            [DataMember]
            [System.Data.Linq.Mapping.Column(Storage = "ModifiedByUser", Name = "Modif_User", DbType = "char(20)")]
            public string ModifiedByUser
            {
                get;
                set;
            }
     
     
            [DataMember]
            [System.Data.Linq.Mapping.Column(Storage = "ModificationDate", Name = "Modif_Date", DbType = "datetime")]
            public Nullable<DateTime> ModificationDate
            {
                get;
                set;
            }
     
            #endregion
        }

    Pour l'enum voila le code (en effet, il est très mal nommé, c'est plutôt resultTransaction mais bon.)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
        public enum eTransactionStatus
        {
            Exception = 0,
            Ok = 1,
            Cancel = 2
     
        }

  7. #7
    Membre chevronné
    Profil pro
    Inscrit en
    Février 2005
    Messages
    1 273
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 1 273
    Points : 2 203
    Points
    2 203
    Par défaut
    Et si tu spécifies le type dans l'interface ?
    ex :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    [DataMember]
            public List<GroupeUtilisateur> Data { get; set; }

  8. #8
    Membre chevronné
    Profil pro
    Inscrit en
    Février 2005
    Messages
    1 273
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 1 273
    Points : 2 203
    Points
    2 203
    Par défaut
    Et aussi de tagger l'enum :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    [DataContract]
     public enum eTransactionStatus
        {
    [EnumMember]
            Exception = 0,
    [EnumMember]
            Ok = 1,
    [EnumMember]
            Cancel = 2
     
        }

  9. #9
    Membre régulier
    Inscrit en
    Décembre 2004
    Messages
    157
    Détails du profil
    Informations personnelles :
    Âge : 42

    Informations forums :
    Inscription : Décembre 2004
    Messages : 157
    Points : 123
    Points
    123
    Par défaut
    Pour l'enum c'est fait.

    Par contre pour ce qui est de rajouter un type dans mon interface, je ne comprend pas trop.

    Le but ici est bien de faire des methode similaires.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    object MaMethode (object obj);
    Ce qui me permet dans mon client d'avoir un composant qui reçoit en paramètre le nom de ma méthode et le nom de mon proxy.

    Et le reste est fait génériquement.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
     
     public void Call()
            {
                Type tpe = Channel.GetType();
     
                MethodInfo[] mthds = tpe.GetMethods();
                MethodInfo mi = tpe.GetMethod(this.MethodeToCall);
                try
                {
                    if (mi == null)
                        throw new Exception("Methode non trouvé.");
                    else
                    {
                        object[] clsParams = new object[] { DataOut };
                        object returnValue = mi.Invoke(Channel, clsParams);
                        DataIn = (DataFactory)returnValue;
                        tpe.GetMethod("Close").Invoke(Channel, null);
                    }
                }
                catch (Exception ex)
                {
                    throw ex;
                }
            }
    Bien entendu, je fais mes test sans ce composant pour qu'il n'y ai pas d'erreur.

  10. #10
    Membre chevronné
    Profil pro
    Inscrit en
    Février 2005
    Messages
    1 273
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 1 273
    Points : 2 203
    Points
    2 203
    Par défaut
    Citation Envoyé par matrix_ceg Voir le message
    Bien entendu, je fais mes test sans ce composant pour qu'il n'y ai pas d'erreur.
    Je ne suis pas certain de comprendre ce que tu veux faire.

    En gros comme on ne peut pas faire de services génériques, tu utilises object pour faire une pseudo généricité ?

    Dans ce cas, là pourquoi ne pas plutôt utiliser un DI comme spring et faire des façades correctement typées?

  11. #11
    Membre régulier
    Inscrit en
    Décembre 2004
    Messages
    157
    Détails du profil
    Informations personnelles :
    Âge : 42

    Informations forums :
    Inscription : Décembre 2004
    Messages : 157
    Points : 123
    Points
    123
    Par défaut
    Je ne veux pas utiliser d'outils externe.

    Je veux pouvoir tout développer moi même.

    Si j'ai une erreur, c'est que je ne maitrise pas la techno et donc plutôt que de passer à autre chose j'aimerais savoir d'où vient mon erreur et la corriger.

    Le projet que je fais est personnel et ne servira pas dans mon boulot pour l'instant. (on est toujours en fwk 2.0).

    Mais si on devait passer au fwk 3.0 ou 3.5, le fait d'avoir fait du spring ne m'aura rien appris. Tandis que si je dois utiliser WCF, je saurais exactement comment l'utiliser.

Discussions similaires

  1. Réponses: 1
    Dernier message: 06/08/2012, 12h47
  2. La connexion a été interrompue de manière inattendue ?
    Par Mady_roar dans le forum Services Web
    Réponses: 7
    Dernier message: 31/05/2012, 11h49
  3. Réponses: 3
    Dernier message: 05/07/2011, 18h17
  4. Problème de connexion sous eclipse
    Par noutnout53 dans le forum Eclipse Java
    Réponses: 1
    Dernier message: 01/03/2006, 09h44
  5. connexion sous MS-dos
    Par electro-asm dans le forum Administration
    Réponses: 11
    Dernier message: 26/02/2006, 07h53

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo