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

C# Discussion :

SOAP WS PARAMETRE TYPE TNS:CONNECTION [Débutant]


Sujet :

C#

  1. #1
    Membre à l'essai
    Homme Profil pro
    Responsable du parc et des réseaux de télécommunication
    Inscrit en
    Novembre 2016
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Responsable du parc et des réseaux de télécommunication
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Novembre 2016
    Messages : 20
    Points : 13
    Points
    13
    Par défaut SOAP WS PARAMETRE TYPE TNS:CONNECTION
    Bonjour à toutes et à tous,

    Je suis novice en C# et je cherche à utiliser un Web service qui me demande un paramètre de type Tns:Connection ( ce web service doit me permettre de créer une chaîne de connexion dans une Application Web développée en C#.Net

    voici un extrait du WSDL de la méthode AddConnection :
    <s:element name="AddConnection">
    <s:complexType>
    <s:sequence>
    <s:element minOccurs="0" maxOccurs="1" name="obj" type="tns:Connection"/>
    </s:sequence>
    </s:complexType>
    </s:element>

    Mon problème est que je ne sais absolument pas quoi envoyer en paramètre j'ai tenté la chose suivante :

    fr.marquetis.hermes.setconfig.ServiceTools ws = new fr.marquetis.hermes.setconfig.ServiceTools();
    ws.AddConnection("le paramètre dont j'ignore le type");

    Je pensais à quelque chose qui ressemblerai à ça : "Provider = SQLOLEDB.1; catalog = DATABASE_NAME; User ID = sa; Data Source = 192.168.192.201; Persist Security Info = True; Password = ******"; mais du coup c'est un String et non le paramètre attendu.


    Petite précision lorsque je commence à taper ws.AddConnection( ... visual studio m'indique la ligne suivante :

    fr.marquetis.hermes.setconfig.Connection fr.marquetis.hermes.setconfig.ServiceTools.AddConnection(fr.marquetis.hermes.setconfig.Connection obj)

    Du coup j'ai l'impression qu'il faut que j'utilise la méthode Connection pour pouvoir utiliser la méthode AddConnection ?


    Je ne sais pas si j'ai été assez clair et précis dans tous les cas je remercie par avance ceux qui tenteront de m'aiguiller sur le sujet.

    Dur dur le C# quand on fait que du Php ;-)

  2. #2
    Membre expert Avatar de jopopmk
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2011
    Messages
    1 856
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2011
    Messages : 1 856
    Points : 3 570
    Points
    3 570
    Par défaut
    Salut,

    tns:Connection doit être décrit plus tôt dans ton WSDL ou dans un XSD référencé dans une balise import.
    M'est avis qu'il s'agit également d'un complexType qui possède plusieurs éléments.
    Si tu fais suivre le WSDL (ou son URL) on pourra regarder ça.

    Je connais "un peu" SOAP (ses WSDL et XSD barbares) par contre je connais pas l'implémentation en .NET, du coup après ça je pourrai pas trop t'aider.
    Plus je connais de langages, plus j'aime le C.

  3. #3
    Membre à l'essai
    Homme Profil pro
    Responsable du parc et des réseaux de télécommunication
    Inscrit en
    Novembre 2016
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Responsable du parc et des réseaux de télécommunication
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Novembre 2016
    Messages : 20
    Points : 13
    Points
    13
    Par défaut
    Super merci beaucoup je vous envoi ça des demain je n' ai pas l URL du wsdl de tête

  4. #4
    Membre à l'essai
    Homme Profil pro
    Responsable du parc et des réseaux de télécommunication
    Inscrit en
    Novembre 2016
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Responsable du parc et des réseaux de télécommunication
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Novembre 2016
    Messages : 20
    Points : 13
    Points
    13
    Par défaut
    Le wsdl en pièce jointe encore merci pour votre aide...
    Fichiers attachés Fichiers attachés

  5. #5
    Membre expert Avatar de jopopmk
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2011
    Messages
    1 856
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2011
    Messages : 1 856
    Points : 3 570
    Points
    3 570
    Par défaut
    Re,

    alors le namespace qui nous intéresse (tns) est déclaré dans la balise des definitions.
    La balise schema (balise qui contient les définitions de type) qui a cette URL pour espace de nom cible est la première déclarée.
    Elle contient comme définition pour Connection le XSD suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    <s:complexType name="Connection">
      <s:complexContent mixed="false">
        <s:extension base="tns:ConnectionBase">
          <s:sequence>
            <s:element minOccurs="1" maxOccurs="1" name="Valid" type="s:boolean" />
            <s:element minOccurs="1" maxOccurs="1" name="Forced" type="s:boolean" />
          </s:sequence>
        </s:extension>
      </s:complexContent>
    </s:complexType>
    On notera que l'attribut mixed est à false, elle ne doit donc pas contenir de text, juste les sous-balises décrites.
    Sinon, elle est censée contenir une séquence (normalement c'est ordonné) de booléens obligatoires (min et maxOccurs à 1): Valid et Forced.
    On voit aussi que c'est une extension du type ConnectionBase, qu'on trouve plus tôt :
    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
    <s:complexType name="ConnectionBase">
      <s:complexContent mixed="false">
        <s:extension base="tns:OM">
          <s:sequence>
             <s:element minOccurs="0" maxOccurs="1" name="Type" type="s:string" />
             <s:element minOccurs="0" maxOccurs="1" name="Login" type="s:string" />
             <s:element minOccurs="0" maxOccurs="1" name="Password" type="s:string" />
             <s:element minOccurs="0" maxOccurs="1" name="Base" type="s:string" />
             <s:element minOccurs="0" maxOccurs="1" name="Server" type="s:string" />
             <s:element minOccurs="0" maxOccurs="1" name="Description" type="s:string" />
             <s:element minOccurs="0" maxOccurs="1" name="DatabaseConnection" type="s:string" />
            <s:element minOccurs="0" maxOccurs="1" name="Name" type="s:string" />
          </s:sequence>
        </s:extension>
      </s:complexContent>
    </s:complexType>
    Une balise de type AddConnection est donc constituée des balises de ConnectionBase et de Connection.
    Bon, ConnectionBase est aussi une extension, t'as compris le principe on va chercher le type de base "OM" :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    <s:complexType name="OM">
      <s:sequence>
        <s:element minOccurs="0" maxOccurs="1" name="createBy" type="s:string" />
        <s:element minOccurs="0" maxOccurs="1" name="updateBy" type="s:string" />
        <s:element minOccurs="0" maxOccurs="1" name="deleteBy" type="s:string" />
        <s:element minOccurs="1" maxOccurs="1" name="createAt" type="s:dateTime" />
        <s:element minOccurs="1" maxOccurs="1" name="updateAt" type="s:dateTime" />
        <s:element minOccurs="1" maxOccurs="1" name="deleteAt" type="s:dateTime" />
        <s:element minOccurs="0" maxOccurs="1" name="Oid" type="s:string" />
      </s:sequence>
    </s:complexType>
    Pour info : si jamais minOccurs est à 0 c'est que la balise n'est pas obligatoire pour être valide.

    Pour conclure, une balise AddConnection pourrait ressembler à ça (hors namespace, avec des valeurs bidons et tous les champs remplis même si c'est pas nécessaire) :
    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
    <AddConnection>
     
      <!-- la partie OM -->
      <createBy>username</createBy>
      <updateBy>username</updateBy>
      <deleteBy>username</deleteBy>
      <createAt>2016-01-01T00:00:00Z</createAt>
      <updateAt>2016-01-31T00:00:00Z<updateAt>
      <deleteAt>2016-02-28T00:00:00Z</deleteAt>
      <Oid>123456</Oid>
     
      <!-- la partie ConnectionBase -->
      <Type>some type</Type>
      <Login>username</Login>
      <Password>p455w0RD</Password>
      <Base>my base</Base>
      <Server>my server</Server>
      <Description>some description</Description>
      <DatabaseConnection>some database connection</DatabaseConnection>
      <Name>some name</Name>
     
      <!-- la partie Connection -->
      <Valid>true</Valid>
      <Forced>true</Forced>
     
    </AddConnection>
    Il faut bien sûr que tu comprennes les données attendues, sur ce point je peux pas t'aider y'a pas de commentaires dans ce WSDL.

    Voilà, en espérant que ça te fournira quelques pistes d'avancement.
    Plus je connais de langages, plus j'aime le C.

  6. #6
    Membre à l'essai
    Homme Profil pro
    Responsable du parc et des réseaux de télécommunication
    Inscrit en
    Novembre 2016
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Responsable du parc et des réseaux de télécommunication
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Novembre 2016
    Messages : 20
    Points : 13
    Points
    13
    Par défaut
    Franchement un grand Merci à vous je commence à y voir un peu plus clair je vous montrerai le résultat final dès que j'aurais bien renseigné tous les paramètres.

  7. #7
    Membre à l'essai
    Homme Profil pro
    Responsable du parc et des réseaux de télécommunication
    Inscrit en
    Novembre 2016
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Responsable du parc et des réseaux de télécommunication
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Novembre 2016
    Messages : 20
    Points : 13
    Points
    13
    Par défaut SUITE ...
    Voilà où j'en suis :
    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
     
    fr.marquetis.hermes.setconfig.ServiceTools ws = new fr.marquetis.hermes.setconfig.ServiceTools();
                fr.marquetis.hermes.setconfig.Connection ws_connection = new fr.marquetis.hermes.setconfig.Connection();
                fr.marquetis.hermes.setconfig.OM ws_om = new fr.marquetis.hermes.setconfig.OM();
     
                // < !--la partie OM -->
                ws_om.createBy = "";
                ws_om.updateBy = "";
                ws_om.deleteBy = "";
                ws_om.createAt = DateTime.Now;
                ws_om.updateAt = DateTime.Now;
                ws_om.deleteAt = new DateTime('d');
                ws_om.Oid = "PrtZ58rt";
     
                // < !--la partie ConnectionBase -->
     
                ws_connection.createAt = ws_om.createAt;
                ws_connection.updateAt = ws_om.updateAt;
                ws_connection.Oid = ws_om.Oid;
     
                ws_connection.Type = "SQLSERVER";
                ws_connection.Login = "sa";
                ws_connection.Password = "XXXXXX";
                ws_connection.Base = "TEST_CHARLOTTE";
                ws_connection.Server = "192.168.192.201";
                ws_connection.Description = "TEST_CHARLOTTE";
                ws_connection.DatabaseConnection = "Provider=SQLOLEDB.1;User ID=sa;Password=XXXXXX;Initial Catalog=TEST_CHARLOTTE;Data Source=192.168.192.201";
                ws_connection.Name = "TEST_CHARLOTTE";
     
                //< !--la partie Connection -->
                ws_connection.Valid = true;
                ws_connection.Forced = false;
     
                try
                {
                    ws.AddConnection(ws_connection);
                    MessageBox.Show("La chaîne de connexion "+ws_connection.Name.ToString()+" a été créée avec succès !");
                }
                catch (Exception exp)
                {
                    MessageBox.Show(exp.ToString());
                }
    J'ai renseigné un maximum de paramètre mais j'ai toujours un message d'erreur :

    Exception levée*: 'System.Web.Services.Protocols.SoapException' dans System.Web.Services.dll
    Le programme '[15692] WindowsFormsApplication1.vshost.exe' s'est arrêté avec le code -1 (0xffffffff).

    ---------------------------

    ---------------------------
    System.Web.Services.Protocols.SoapException: System.Web.Services.Protocols.SoapException: HNet Error ---> Com.Vocalcom.Utils.CodeException: Cette transaction n'est pas ouverte.
    à Com.Vocalcom.AdminCore.Persist.OleDbTransaction.Create(OM obj) dans d:\Hermes_net_v4\admin\Web_Service\Persist\SqlTransaction.cs:ligne 1019
    à Com.Vocalcom.Tools.WS.ServiceTools.AddConnection(Connection obj) dans d:\Hermes_net_v4\admin\Web_Service\SetConfig.asmx.cs:ligne 10537
    --- Fin de la trace de la pile d'exception interne ---
    à Com.Vocalcom.Tools.WS.ServiceTools.AddConnection(Connection obj) dans d:\Hermes_net_v4\admin\Web_Service\SetConfig.asmx.cs:ligne 10549

    à System.Web.Services.Protocols.SoapHttpClientProtocol.ReadResponse(SoapClientMessage message, WebResponse response, Stream responseStream, Boolean asyncCall)

    à System.Web.Services.Protocols.SoapHttpClientProtocol.Invoke(String methodName, Object[] parameters)

    à WindowsFormsApplication1.fr.marquetis.hermes.setconfig.ServiceTools.AddConnection(Connection obj) dans C:\Users\SSANCHEZ\Documents\Visual Studio 2015\Projects\WindowsFormsApplication1\WindowsFormsApplication1\Web References\fr.marquetis.hermes.setconfig\Reference.cs:ligne 8106

    à WindowsFormsApplication1.Form1.button2_Click(Object sender, EventArgs e) dans C:\Users\SSANCHEZ\Documents\Visual Studio 2015\Projects\WindowsFormsApplication1\WindowsFormsApplication1\Form1.cs:ligne 223
    ---------------------------


    Je ne comprends pas vraiment l'exception levée... Faut-il que j'appel une autre méthode avant AddConnection() ?

    D'avance merci pour votre aide...

  8. #8
    Membre expert Avatar de jopopmk
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2011
    Messages
    1 856
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2011
    Messages : 1 856
    Points : 3 570
    Points
    3 570
    Par défaut
    C'est là où je vais pas trop savoir comment t'aider, on attaque l'implémentation en .NET
    Si je connais bien SOAP c'est parce que j'ai pas mal pratiqué, mais toujours en C.

    Là je me demande quand même si tu ne recevrais pas une FAULT du serveur.
    Peut-être que la partie OM (Object Model ? ) n'est pas correcte, ou cohérente.
    Si pour ton objet ws_connection tu ne remplis aucune valeur pour les champs hérités de OM, tu obtiens la même erreur ?

    PS : Un truc que j'aurais dû t'indiquer de suite : tu peux utiliser SoapUI comme client générique pour les service SOAP. C'est une application gratuite, a priori multi-plateforme vu qu'il est fait en Java, qui permet de monter toutes les opérations de tous les services depuis un WSDL. Peut-être que ça pourrait t'aider, pour ton problème actuel ou un problème à venir.
    Plus je connais de langages, plus j'aime le C.

  9. #9
    Membre à l'essai
    Homme Profil pro
    Responsable du parc et des réseaux de télécommunication
    Inscrit en
    Novembre 2016
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Responsable du parc et des réseaux de télécommunication
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Novembre 2016
    Messages : 20
    Points : 13
    Points
    13
    Par défaut
    J'ai tenté d'enlever tous les champs hérités mais j'obtiens le même résultat.

    Je sens que je touche au but je vais tenter d'utiliser SoapUI cela pourra peut être me permettre de mettre en avant une erreur !

    En tout cas merci beaucoup pour le temps que tu m'as accordé c'est vraiment très sympa !

    Je ne manquerai pas de poster la solution dès que j'aurais trouvé.

  10. #10
    Membre à l'essai
    Homme Profil pro
    Responsable du parc et des réseaux de télécommunication
    Inscrit en
    Novembre 2016
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Responsable du parc et des réseaux de télécommunication
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Novembre 2016
    Messages : 20
    Points : 13
    Points
    13
    Par défaut SUITE ET FIN
    Comme convenu, je reviens pour poster la solution de mon problème qui avait bien avancer grâce à jopopmk

    En fait il y avait Trois problèmes:

    1/ Il me fallait créer un cookie de session avant de pouvoir utiliser ce web service ( je pensais que seul l'authentification suffisait !)
    2/ Il fallait utiliser une méthode SetConfig.Begin() qui permettait d'activer les autres méthodes.
    Ensuite effectuer le traitement quasiment comme jopopmk me l'avait expliqué...
    3/ Pour finir utiliser la méthode SetConfig.Commit() pour enregistrer les modifications.

    Mon problème venait donc davantage de la connaissance du fonctionnement de l'application plus que de l'utilisation des WEB SERVICE avec C#.

    le code pour être plus clair :
    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
     
        fr.marquetis.hermes.ServiceCallFileManager.ServiceCallFileManager ws_service = new fr.marquetis.hermes.ServiceCallFileManager.ServiceCallFileManager();
                        fr.marquetis.hermes.setconfig.ServiceTools setConfig = new fr.marquetis.hermes.setconfig.ServiceTools();
                        fr.marquetis.hermes.setconfig.Connection Connection = new fr.marquetis.hermes.setconfig.Connection();
                        fr.marquetis.hermes.setconfig.Customer Customer = new fr.marquetis.hermes.setconfig.Customer();
                        fr.marquetis.hermes.getconfig.ReadTools getConfig = new fr.marquetis.hermes.getconfig.ReadTools();
     
     
                        setConfig.CookieContainer = new System.Net.CookieContainer();
                        setConfig.Url = "http://localhost/hermes_net_v4/admin/web_service/setconfig.asmx";
                        setConfig.LogUser("");
                        setConfig.Begin();
     
                        // < !--la partie Connection -->
                        Connection.Type = "SQLSERVER";
                        Connection.Login = "sa";
                        Connection.Password = "XXXXXX";
                        Connection.Base = CampaignName.Text;
                        Connection.Server = "192.168.192.X";
                        Connection.Description = CampaignName.Text;
                        Connection.DatabaseConnection = "Provider=SQLOLEDB.1;User ID=sa;Password=XXXXXX;Initial Catalog=" + CampaignName.Text + "; Data Source=192.168.192.X";
                        Connection.Name = CampaignName.Text;
                        Connection.Valid = true;
     
                        try
                        {
                            ws_service.CreateDatabaseWithConnectionString(Connection.DatabaseConnection, Connection.Type, Connection.Name);
                            Connection = setConfig.AddConnection(Connection);
     
                            MessageBox.Show("La chaîne de connexion " + Connection.Name.ToString() + " a été créée avec succès !");
                            setConfig.Commit();
     
                        }
                        catch (Exception exp)
                        {
                            MessageBox.Show(exp.ToString());
                        }
    Encore merci pour votre aide.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 2
    Dernier message: 23/11/2007, 09h27
  2. [SOAP] Passage des types imposés en paramètres
    Par Guybrush113 dans le forum Bibliothèques et frameworks
    Réponses: 1
    Dernier message: 08/10/2007, 09h34
  3. [Forms10g] Donner Parametre type text item Procedure
    Par sterix92 dans le forum Forms
    Réponses: 6
    Dernier message: 20/05/2007, 13h48
  4. Que choisir dans comme type de connection DWL-2000AP+
    Par jean christophe dans le forum Réseau
    Réponses: 3
    Dernier message: 03/11/2005, 18h48
  5. [dbexpress IB/FB] parametres de la connection
    Par pirbd dans le forum Bases de données
    Réponses: 2
    Dernier message: 13/07/2004, 16h49

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