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

Services Web Discussion :

Utiliser un web service WCF autohebergé dans une référence Web


Sujet :

Services Web

  1. #1
    Membre du Club
    Inscrit en
    Juin 2007
    Messages
    82
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 82
    Points : 46
    Points
    46
    Par défaut Utiliser un web service WCF autohebergé dans une référence Web
    Bonjour,

    Je suis face à un problème car je n'arrive pas à appeler mon service web par une référence web, alors qu'il fonctionne bien par référence de service.

    Mon cas est le suivant :
    - sur un serveur sql 2008 r2, j'ai un service windows qui héberge un web service WCF
    - je développe une CLR SQL server qui doit appeler ce web service pour y récupérer les informations.
    - Après plusieurs recherche sur le web il faut "apparemment" que je passe par une référence web au lieu de référence de service, car sinon lorsque je veux installer mon assembly sur SQL server, il faut que j'installe de nombreuses dll de référence (ce que je veux éviter)

    Le plus étrange dans tout cas, c'est que lorsque je veux accéder à ma référence web (http://srv:9001/Xrate?wsdl) il me trouve bien les méthodes mais ca ne fonctionne pas
    Voici le message d'erreur
    Ce document a été reconnu, mais il n'a pas pu être traité.
    - Le document WSDL contient des liens qui n'ont pas pu être résolus.
    - Une erreur s'est produite lors du téléchargement de 'http://localhost:9001/Xrate?xsd=xsd0'.
    Pour information,
    Le web service fonctionne correctement par le naviguateur (wsdl, rest, ...)
    voici mon fichier de configuration du Service Windows avec la configuration du WCF
    Code xml : 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
    66
     
    <?xml version="1.0" encoding="utf-8"?>
    <configuration>
     
      <configSections>
        <!-- For more information on Entity Framework configuration, visit http://go.microsoft.com/fwlink/?LinkID=237468 -->
        <section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
      </configSections>
     
      <appSettings>
        <!--Paramètre debug dans le journal windows - 0 : Off / 1 : On-->
        <add key="debug" value="0" />
        <!--Paramètre interval pour l'interval de récupération des valeurs - à définir en heures - -->
        <add key="interval" value="8" />
      </appSettings>
     
      <connectionStrings>
        <!--<add name="CxDevise" connectionString="metadata=res://*/DeviseModel.csdl|res://*/DeviseModel.ssdl|res://*/DeviseModel.msl;provider=System.Data.SqlClient;provider connection string=&quot;data source=srvvqsql2;initial catalog=devise;integrated security=True;multipleactiveresultsets=True;App=EntityFramework&quot;" providerName="System.Data.EntityClient" />-->
        <add name="CxDevise" connectionString="metadata=res://*/DeviseModel.csdl|res://*/DeviseModel.ssdl|res://*/DeviseModel.msl;provider=System.Data.SqlClient;provider connection string=&quot;data source=xxx;initial catalog=xxx;user id=xxx;Password=xxx;multipleactiveresultsets=True;App=EntityFramework&quot;" providerName="System.Data.EntityClient" />
      </connectionStrings>
     
      <system.serviceModel>
        <services>
          <service name="Devise.WCF.DeviseWs" behaviorConfiguration="XrateServiceBehavior">
            <!-- this endpoint is exposed at the base address provided by host: http://localhost:9001/Xrate  -->
            <endpoint address="" binding="wsHttpBinding" contract="Devise.WCF.IDeviseWs" />
            <!-- REST Endpoint is explosed at http://localhost:9001/Xrate/rest/... -->
            <endpoint address="rest" binding="webHttpBinding" contract="Devise.WCF.IDeviseWs" behaviorConfiguration="webHttp" />
            <!-- the mex endpoint is explosed at http://localhost:9001/Xrate/mex -->
            <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" />
            <host>
              <baseAddresses>
                <add baseAddress="http://localhost:9001/Xrate" />
              </baseAddresses>
            </host>
          </service>
        </services>
        <behaviors>
          <serviceBehaviors>
            <behavior name="XrateServiceBehavior">
              <serviceMetadata httpGetEnabled="true" />
            </behavior>
          </serviceBehaviors>
          <endpointBehaviors>
            <behavior name="webHttp">
              <webHttp />
            </behavior>
          </endpointBehaviors>
        </behaviors>
      </system.serviceModel>
     
      <system.web>
        <customErrors mode="Off" />
      </system.web>
     
      <entityFramework>
        <defaultConnectionFactory type="System.Data.Entity.Infrastructure.LocalDbConnectionFactory, EntityFramework">
          <parameters >
            <parameter value="v11.0" />
          </parameters>
        </defaultConnectionFactory>
        <providers>
          <provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" />
        </providers>
      </entityFramework>
    </configuration>

    Il y a peux être une autre solution pour appeler un WCF dans une CLR, si vous avez ca je suis preneur

    Par avance merci du coup de main.

  2. #2
    Membre du Club
    Inscrit en
    Juin 2007
    Messages
    82
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 82
    Points : 46
    Points
    46
    Par défaut
    N'arrivant toujours pas à me connecter sur le serveur, j'ai installé le service sur ma machine.
    Du coup, que ça soit par référence de service ou par référence web, je n'arrive pas a attaquer mon web service dans un projet console...

    Il semblerai que la définition des mes endpoints dans mon fichier de configuration soit faux, mais je ne vois pas pourquoi.

    cf le message d'erreur par référence de service. Par référence web je tombe en timeout.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Impossible de trouver un élément de point de terminaison par défaut qui fait référence au contrat 'xRateService2.Xrate' dans la section de configuration du client ServiceModel. Ceci peut être dû au fait que le fichier de configuration de votre application est introuvable ou que l'élément de point de terminaison correspondant à ce contrat est introuvable dans l'élément client.

  3. #3
    Membre du Club
    Inscrit en
    Juin 2007
    Messages
    82
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 82
    Points : 46
    Points
    46
    Par défaut
    Bon finalement j'arrive a attaquer le web service sur ma machine comme sur le serveur en mode référence de service.

    Par contre toujours impossible d'appeler le web service avec la web référence.
    Celui-ci tombe en timeout à chaque fois alors que le même appel fonctionne avec l'autre méthode...

    pour info voila le fichier de config généré dans le dossier client
    Code xml : 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
    <?xml version="1.0" encoding="utf-8" ?>
    <configuration>
        <configSections>
            <sectionGroup name="applicationSettings" type="System.Configuration.ApplicationSettingsGroup, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" >
                <section name="ClassLibrary1.Properties.Settings" type="System.Configuration.ClientSettingsSection, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
            </sectionGroup>
        </configSections>
        <applicationSettings>
            <ClassLibrary1.Properties.Settings>
                <setting name="ClassLibrary1_ws_DeviseWs" serializeAs="String">
                    <value>http://localhost:9001/Xrate</value>
                </setting>
            </ClassLibrary1.Properties.Settings>
        </applicationSettings>
        <system.serviceModel>
            <bindings />
            <client />
        </system.serviceModel>
    </configuration>

    Une idée peux être ?

  4. #4
    Modérateur
    Avatar de DotNetMatt
    Homme Profil pro
    CTO
    Inscrit en
    Février 2010
    Messages
    3 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : CTO
    Secteur : Finance

    Informations forums :
    Inscription : Février 2010
    Messages : 3 611
    Points : 9 743
    Points
    9 743
    Billets dans le blog
    3
    Par défaut
    La référence de service s'utilise avec WCF, et la référence de service Web s'utilise avec ASMX. Il n'y aucun intérêt à vouloir utiliser la référence de service Web sur un service WCF.
    Less Is More
    Pensez à utiliser les boutons , et les balises code
    Desole pour l'absence d'accents, clavier US oblige
    Celui qui pense qu'un professionnel coute cher n'a aucune idee de ce que peut lui couter un incompetent.

  5. #5
    Membre du Club
    Inscrit en
    Juin 2007
    Messages
    82
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 82
    Points : 46
    Points
    46
    Par défaut
    Merci pour ta réponse.

    L’intérêt (pour moi en tout cas) et de ne pas avoir à charger de nombreuses DLL dans SQL server pour appeler mon web service.

    voici un exemple où est utilisé un WCF et où tout à l'air de fonctionner.
    http://social.technet.microsoft.com/...px?PageIndex=2

    Je pense que je ne suis pas loin de le faire fonctionner, car j'arrive à bien générer ma référence web mais lorsque je fais l'appel celui ci tombe en timeout.

    Autre différence, je n'ai pas de .svc vu que mon WCf est inclus dans un service windows.

    Pour info, afin de mettre en place mon service avec le WCF je me suis appuyer sur cette solution : https://msdn.microsoft.com/en-us/lib...=vs.90%29.aspx

  6. #6
    Membre du Club
    Inscrit en
    Juin 2007
    Messages
    82
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 82
    Points : 46
    Points
    46
    Par défaut
    Alors petit update,

    J'arrive maintenant à faire mon appel par web référence.
    Pour cela j'ai rajouté le basicHttpBinding dans mon fichier de configuration.

    Par contre, je n'arrive maintenant plus à utiliser mon web service par référence de service, ce qui n'est pas un drame vu que je ne m'en sert pas pour le moment.
    Mais j'aimerai bien le remettre dans le cas où je devrait me servir de ce web service dans un autre projet.

    Comment puis-je faire pour que les 2 puissent fonctionner en même temps.
    Je ne comprends pas trop comment configurer les 2 endpoints sur la même adresse...

    Voila mon fichier de configuration actuel du service windows :
    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
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
     
    <?xml version="1.0" encoding="utf-8"?>
    <configuration>
     
      <configSections>
        <!-- For more information on Entity Framework configuration, visit http://go.microsoft.com/fwlink/?LinkID=237468 -->
        <section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
      </configSections>
     
      <appSettings>
        <add key="debug" value="0" />
        <add key="interval" value="8" />
      </appSettings>
     
      <connectionStrings>
         <add name="CxDevise" connectionString="metadata=res://*/DeviseModel.csdl|res://*/DeviseModel.ssdl|res://*/DeviseModel.msl;provider=System.Data.SqlClient;provider connection string=&quot;data source=xxx;initial catalog=xxx;user id=xxx;Password=xxx;multipleactiveresultsets=True;App=EntityFramework&quot;" providerName="System.Data.EntityClient" />
      </connectionStrings>
     
      <system.serviceModel>
     
        <services>
          <service name="Devise.WCF.DeviseWs" behaviorConfiguration="XrateServiceBehavior">
     
            <endpoint name="basicHttpBinding" address="" binding="basicHttpBinding" contract="Devise.WCF.IDeviseWs">
              <identity>
                <dns value="localhost"/>
              </identity>
            </endpoint>
     
            <!-- this endpoint is exposed at the base address provided by host: http://localhost:9001/Xrate  -->
            <endpoint name="wsHttpBinding" address="ws" binding="wsHttpBinding" contract="Devise.WCF.IDeviseWs" />
            <!-- REST Endpoint is explosed at http://localhost:9001/Xrate/rest/... -->
            <endpoint name="webHttpBinding" address="rest" binding="webHttpBinding" contract="Devise.WCF.IDeviseWs" behaviorConfiguration="webHttp" />
            <!-- the mex endpoint is explosed at http://localhost:9001/Xrate/mex -->
            <endpoint name="mexHttpBinding" address="mex" binding="mexHttpBinding" contract="IMetadataExchange" />
            <host>
              <baseAddresses>
                <add baseAddress="http://localhost:9001/Xrate" />
              </baseAddresses>
            </host>
          </service>
        </services>
     
        <behaviors>
          <serviceBehaviors>
            <behavior name="XrateServiceBehavior">
              <serviceMetadata httpGetEnabled="true" />
              <serviceDebug includeExceptionDetailInFaults="true"/>
            </behavior>
          </serviceBehaviors>
     
          <endpointBehaviors>
            <behavior name="webHttp">
              <webHttp />
            </behavior>
          </endpointBehaviors>
        </behaviors>
     
      </system.serviceModel>
     
      <system.web>
        <customErrors mode="Off" />
      </system.web>
     
      <entityFramework>
        <defaultConnectionFactory type="System.Data.Entity.Infrastructure.LocalDbConnectionFactory, EntityFramework">
          <parameters >
            <parameter value="v11.0" />
          </parameters>
        </defaultConnectionFactory>
        <providers>
          <provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" />
        </providers>
      </entityFramework>
    </configuration>
    Du coup maintenant, je suis face à un autre soucis mais d'ordre SQL Server, car lorsque j'appel ma procédure qui appèle le web service il me dit "Impossible de se connecter au serveur distant".
    Je vais voir avec les dba et je posterai ailleurs si je n'arrive pas à résoudre.

Discussions similaires

  1. Réponses: 1
    Dernier message: 03/03/2015, 15h47
  2. Réponses: 2
    Dernier message: 16/09/2014, 13h01
  3. Récupérer un champ texte d'une page web pour l'insérer dans une autre
    Par Cubilot dans le forum Balisage (X)HTML et validation W3C
    Réponses: 2
    Dernier message: 02/06/2014, 10h08
  4. [Débutant] Problème atteinte de ma BD via web services WCF Hébergé dans un service windows
    Par floryndas dans le forum Services Web
    Réponses: 1
    Dernier message: 18/11/2013, 11h48
  5. [SOAP][Web Service] erreur création d'une référence Web
    Par Maximil ian dans le forum XML/XSL et SOAP
    Réponses: 6
    Dernier message: 20/06/2005, 13h29

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