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 :

Impossible de faire passer mon DataContext ! Une idée ?


Sujet :

Windows Communication Foundation .NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    240
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 240
    Par défaut Impossible de faire passer mon DataContext ! Une idée ?
    Re,

    Je suis toujours sur la même erreur que hier.Aprés plusieurs recherches et méthode, je pense me rapprocher du but. Sauriez-vous comment je pourrais passé une DataContext entre mon client et une classe implémentant une interface ?

    Je rapel que je suis en WCF.

    The server was unable to process the request due to an internal error. For more information about the error, either turn on IncludeExceptionDetailInFaults (either from ServiceBehaviorAttribute or from the <serviceDebug> configuration behavior) on the server in order to send the exception information back to the client, or turn on tracing as per the Microsoft .NET Framework 3.0 SDK documentation and inspect the server trace logs.
    Code Client: Mon erreur se produit à cette ligne là ==> myService.Init(oDataContext).

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
                InitializeComponent();
                myChannelFactory = new ChannelFactory<I_Base_De_Donnees.IServiceDev>(new NetTcpBinding(), "net.tcp://localhost:8018/Interface_Imp_BDD.CurrencyService");
                myService = myChannelFactory.CreateChannel();
                String Connect = "Server=" + SQLServer_Server + ";Database=" + SQLServer_Database + ";Trusted_Connection=" + SQLServer_TrustedConnection + "; User Id=" + SQLServer_UserId + "; Password=" + SQLServer_UserPassword + "";
                oDataContext = new DataContext(Connect);
                myService.Init(oDataContext);

    Implémentation :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    public void Init(DataContext Context)
    {
    (...)
    }
    Interface :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
            [OperationContract()]
            void Init(DataContext Context);


    Auriez-vous une idée de mon erreur ? Je précise que les paramètres de connexion sont bons, puisque je les ai testé sur un autre projet, sans interface, sans rien du tout...

    D'avance merci
    ++

  2. #2
    Membre éclairé
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    240
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 240
    Par défaut
    Re,

    Aprés plusieurs rercherche ça serait un problème de sécurité ! Comment passer cet objet en paramètre ???

    Mais je n'arrive pas à trouvé la configuration necessaire qui irait bien dans mon cas.

    Auriez-vous une idée ?

    App.Config Client :

    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
    <?xml version="1.0" encoding="utf-8" ?>
    <configuration>
      <system.serviceModel>
        <bindings>
          <netTcpBinding>
            <binding name="NewBinding0">
              <security mode="Transport">
                <transport clientCredentialType="Windows" />
              </security>
            </binding>
          </netTcpBinding>
        </bindings>   
        <client>
          <endpoint
            address="net.tcp://localhost:8018/Interface_Imp_BDD.CurrencyService"
            binding="netTcpBinding"
            contract="I_Base_De_Donnees.IServiceDev"
            name="ConfigurationHttpCurrency" />
        </client>   
      </system.serviceModel>
    </configuration>

    App.Config Serveur Hôte:


    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
    <?xml version="1.0" encoding="utf-8" ?>
    <configuration>
      <system.serviceModel>
        <bindings>
          <netTcpBinding>
            <binding name="NewBinding0">
              <security mode="Transport">
                <transport clientCredentialType="Windows" />
              </security>
            </binding>
          </netTcpBinding>
        </bindings>   
        <services>
          <service name="Interface_Imp_BDD.CurrencyService">
            <endpoint
                address="net.tcp://localhost:8018/Interface_Imp_BDD.CurrencyService"
                binding="netTcpBinding"
                contract="I_Base_De_Donnees.IServiceDev" />
          </service>
        </services>
        <behaviors>
          <serviceBehaviors>
             <behavior name="metadataAndDebug">
                <serviceMetadata  httpGetEnabled="true" httpGetUrl=""/>
                <serviceDebug httpHelpPageEnabled="true" includeExceptionDetailInFaults="true" />
            </behavior>
           </serviceBehaviors>      
        </behaviors>
      </system.serviceModel>
      <system.diagnostics>
        <trace autoflush="true" />
        <sources>
          <source name="System.ServiceModel"
                  switchValue="Information, ActivityTracing"
                  propagateActivity="true">
            <listeners>
              <add name="sdt"
                  type="System.Diagnostics.XmlWriterTraceListener"
                  initializeData= "SdrConfigExample.e2e" />
            </listeners>
          </source>
        </sources>
      </system.diagnostics>
     
    </configuration>
    Interface :

    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
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.ServiceModel;
    using System.Data;
    using System.Data.Linq;
    using System.ComponentModel;
    using System.Net.Security;
     
    namespace I_Base_De_Donnees
    {
     
        [ServiceContract(
            Namespace="http://microsoft.wcf.documentation",
            Name="SampleService",
            ProtectionLevel=ProtectionLevel.EncryptAndSign)]
     
        public interface IServiceDev
        {
     
     
            [OperationContract()]
            void Init(DataContext Context);
     
     
     
     
        }
     
     
     
    }

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

    Informations forums :
    Inscription : Octobre 2002
    Messages : 9 161
    Par défaut
    1) Tu es sur que DataContext est sérialisable ?
    2) D'une manière plus générale, exposer le DataContext directement est une mauvaise idée... Fais toi plutôt des méthodes CRUD qui vont attaquer ton DataContext.

  4. #4
    Membre éclairé
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    240
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 240
    Par défaut
    Citation Envoyé par Thomas Lebrun Voir le message
    1) Tu es sur que DataContext est sérialisable ?
    2) D'une manière plus générale, exposer le DataContext directement est une mauvaise idée... Fais toi plutôt des méthodes CRUD qui vont attaquer ton DataContext.

    C'est un peu la question que je commence à me poser. Car j'ai parcouru en long et en large, les différentes possibilités (Fichier de config,....). Je vais voir ce que tu me dis les méthodes CRUD ! Je n'ai pas encore acheter ton livre...

    En deux mots ça consiste à quoi ?

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    240
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 240
    Par défaut
    Aprés tes conseils j'ai revu un peu le code. En fait il ne semble pas que cet objet soit sérialisable. Je crée le context depuis le serveur...

    J'ai cette fois ce message d'erreur, qui se produit quand il y a des données dans les tables. J'utilise l'authentification SQL Server.

    Error while reading message framing format at position 1 of stream (state: Start)
    Une idée ?
    D'avance merci
    ++

    Interface :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
            [OperationContract]
            List<UTILISATEURS> Init();
    Implémentation

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    public List<UTILISATEURS> Init()
            {
     
     
     
              String Connect = "Server=" +  SQLServer_Server + ";Database=" + SQLServer_Database + ";Trusted_Connection=" + SQLServer_TrustedConnection + "; User Id=" + SQLServer_UserId + "; Password=" + SQLServer_UserPassword + "";
              oDataContext = new DataContext(Connect);
              oUtilisateur = oDataContext.GetTable<UTILISATEURS>();
              List<UTILISATEURS> T = oUtilisateur.ToList<UTILISATEURS>();
    return T;
    }
    Client :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
              myChannelFactory = new ChannelFactory<I_Base_De_Donnees.IServiceDev>("netTcpBinding");
                myService = myChannelFactory.CreateChannel();
                var Exemple_1_bis = (from r in myService.Init() select r);
                foreach (var item in Exemple_1_bis)
                {

    App.Config Serveur :

    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
    <?xml version="1.0" encoding="utf-8" ?>
    <configuration>
      <system.serviceModel>
        <bindings>
        <netTcpBinding>
          <binding name="NetTcpBinding_Config" 
                   maxReceivedMessageSize="50000" >
            <security mode="None">
            </security>
          </binding>
        </netTcpBinding>
        </bindings>
        <behaviors>
          <endpointBehaviors>
            <behavior name="myBehavior">
              <dataContractSerializer maxItemsInObjectGraph="1000000" />
            </behavior>
          </endpointBehaviors>
        </behaviors>
        <services>
          <service name="Interface_Imp_BDD.CurrencyService">
            <endpoint
                address="net.tcp://localhost:8018/Interface_Imp_BDD.CurrencyService"
                behaviorConfiguration ="myBehavior"
                binding="netTcpBinding"
                bindingConfiguration="NetTcpBinding_Config"
                contract="I_Base_De_Donnees.IServiceDev" />
          </service>
        </services> 
      </system.serviceModel>
    </configuration>

    App.Config Client

    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
    <?xml version="1.0" encoding="utf-8" ?>
    <configuration>
      <system.serviceModel>
        <bindings>
          <netTcpBinding>
            <binding name="NetTcpBinding_Config"
                     maxReceivedMessageSize="50000" >
              <security mode="None">
              </security>
            </binding>
          </netTcpBinding>
        </bindings>    
        <behaviors>
          <endpointBehaviors>
            <behavior name="myBehavior">
              <dataContractSerializer maxItemsInObjectGraph="1000000" />
            </behavior>
          </endpointBehaviors>
        </behaviors>
        <client>
          <endpoint
            address="net.tcp://localhost:8018/Interface_Imp_BDD.CurrencyService"
            behaviorConfiguration ="myBehavior"        
            binding="netTcpBinding"
            contract="I_Base_De_Donnees.IServiceDev"
            bindingConfiguration="NetTcpBinding_Config"
            name="netTcpBinding" />
        </client>
      </system.serviceModel>
    </configuration>

Discussions similaires

  1. Réponses: 4
    Dernier message: 22/02/2010, 22h45
  2. Faire passer plusieurs variables à une fonction
    Par goldor dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 20/10/2008, 17h03
  3. Réponses: 3
    Dernier message: 01/02/2008, 20h19
  4. Réponses: 6
    Dernier message: 25/06/2007, 14h00
  5. Réponses: 2
    Dernier message: 12/05/2006, 15h58

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