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 :

WCF: simpleHttpBinding, app.config et host.faulted


Sujet :

Services Web

  1. #1
    Invité
    Invité(e)
    Par défaut WCF: simpleHttpBinding, app.config et host.faulted
    Bonjour a tous,

    Je suis sur la creation d'un service offrant des webservices a un client PHP. J'ai d'abord voulu configurer WCF pour mettre un binding en tcpbinding, mais devant l'impossibilite de trouver comment passer la WSDL a mon client Soap (PHP, donc), j'ai opte pour le simpleHttpBinding. Avez-vous malgre tout une idee de comment passer en TCPBinding et avoir la wsdl ?

    Sinon avec un fichier de config "basique" mon service marche bien, mais des que j'ajoute une section <behaviours>, le service est instoppable, mon navigateur n'arrive plus a se connecter a l'adresse, et les logs Windows me disent ceci:
    Impossible d'arrêter le service. System.ServiceModel.CommunicationObjectFaultedException: L’objet de communication System.ServiceModel.ServiceHost ne peut pas être utilisé pour la communication car il est dans l’état Faulted.
    à System.ServiceModel.Channels.CommunicationObject.Close(TimeSpan timeout)
    [blabla...]
    Si je retourne sur une app.config sans <behaviours>, tout "remarche" (mon navigateur recupere juste une erreur 400 du serveur HTTP binde).
    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
    <?xml version="1.0" encoding="utf-8" ?>
    <configuration>
      <system.serviceModel>
        <services>
          <service name="WCFTestService.SayHello" behaviorConfiguration="TestServiceBehaviour">
            <endpoint
                address="http://localhost:4000/SayHello"
                binding="basicHttpBinding"
                contract="WCFTestService.IHello" />
          </service>
        </services>
        <behaviors>
          <serviceBehaviors>
            <behavior name="TestServiceBehaviour">
              <serviceMetadata httpGetEnabled="true" httpGetUrl="http://localhost/SayHello?wsdl"/>
            </behavior>
          </serviceBehaviors>
        </behaviors>
      </system.serviceModel>
    </configuration>
    TestService.cs
    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
    namespace SomeSpace
    {
        public partial class TestService : ServiceBase
        {
            private ServiceHost host;
     
            public TestService()
            {
                InitializeComponent();
            }
     
            protected override void OnStart(string[] args)
            {
                host = new ServiceHost(typeof(WCFTestService.SayHello));
     
                try
                {
                    host.Open();
                }
                catch (Exception ex)
                {
                }
            }
     
            protected override void OnStop()
            {
                if (host.State == CommunicationState.Opened | host.State == CommunicationState.Faulted | host.State == CommunicationState.Opening)
                {
                    host.Close();
                }
            }
        }
    }
    Contracts.cs
    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
    namespace WCFTestService
    {
        [ServiceContract()]
        public interface IHello
        {
            [OperationContract()]
            string SayHello();
     
            [OperationContract()]
            string SayHelloTo(string name);
        }
     
     
        public class SayHello : IHello
        {
            string IHello.SayHello()
            {
                return "Hello !";
            }
     
            string IHello.SayHelloTo(string name)
            {
                return "Hello " + name + " !";
            }
        }
     
    }
    Quelqu'un serait-il a meme de m'aider ?

    Merci d'avance

  2. #2
    Inactif  
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Janvier 2007
    Messages
    6 604
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC

    Informations forums :
    Inscription : Janvier 2007
    Messages : 6 604
    Points : 13 317
    Points
    13 317
    Par défaut
    Pourquoi n'as tu pas créé un service Web "classique" ?

    Sinon, il manque le mex.

  3. #3
    Invité
    Invité(e)
    Par défaut
    Qu'entends tu par service web classique ? La seule problematique que j'ai, c'est creer un service Windows proposant des webservices via SOAP, compatible avec un client PHPSoap.

    Concernant le mex, j'ai tente de le rajouter de la maniere suivante, mais marche pas non plus
    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
    <?xml version="1.0" encoding="utf-8" ?>
    <configuration>
      <system.serviceModel>
        <services>
          <service name="WCFTestService.SayHello" behaviorConfiguration="TestServiceBehaviour">
            <endpoint address="http://localhost:4000/SayHello" name="basicHttp" binding="basicHttpBinding" contract="WCFTestService.IHello" />
            <endpoint address="" binding="mexHttpBinding" name="mex" contract="IMetadataExchange"/>
          </service>
        </services>
        <behaviors>
          <serviceBehaviors>
            <behavior name="TestServiceBehaviour">
              <serviceMetadata httpGetEnabled="true" policyVersion="Policy15"/>
            </behavior>
          </serviceBehaviors>
        </behaviors>
      </system.serviceModel>
    </configuration>
    De plus, a supposer que le service marche, je suis cense y acceder en aller a l'adresse definie par l'endpoint mex ou basicHttpBinding ? Et dois-je rajouter le "?wsdl" a la fin ?

    Merci

  4. #4
    Invité
    Invité(e)
    Par défaut
    Bon, en supprimant le mex et en ajoutant ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <serviceMetadata httpGetEnabled="true" httpGetUrl="http://localhost/Services" />
    (il me manquait le "httpGetUrl") je peux enfin avoir acces a la WSDL.

    Mais dans ce cas la a quoi sert le mex ? Mon utilisation est-elle correcte ou devrais-je plutot passer par le mex ? (et dans ce cas la, pourquoi ca marchait pas ?)

    EDIT::
    En plus, la WSDL est pas geniale... Je ne suis pas cense connaitre l'adresse IP de la machine qui host le service. Donc dans mes "address" j'ai mis localhost. Le service repond tres bien avec la vraie IP du serveur, mais la WSDL contient des liens pourris
    <wsdl:definitions name="SayHello" targetNamespace="http://tempuri.org/">

    <wsdl:types>

    <xsd:schema targetNamespace="http://tempuri.org/Imports">
    <xsd:import schemaLocation="http://localhost/Services?xsd=xsd0" namespace="http://tempuri.org/"/>
    <xsd:import schemaLocation="http://localhost/Services?xsd=xsd1" namespace="http://schemas.microsoft.com/2003/10/Serialization/"/>
    </xsd:schema>
    </wsdl:types>
    [blabla...]
    Y'a un moyen de changer ca ?
    Dernière modification par Invité ; 15/04/2009 à 16h32.

  5. #5
    Invité
    Invité(e)
    Par défaut
    C'est bon j'ai pu le faire en passant par le ServiceHost.
    Merci

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

Discussions similaires

  1. WCF sans le fichier app.config
    Par yohan_g dans le forum Services Web
    Réponses: 11
    Dernier message: 17/10/2013, 20h50
  2. [Débutant] WCF : ABC dans App.Config: souci de configuration entre le host et le client
    Par Hepil dans le forum Services Windows
    Réponses: 3
    Dernier message: 01/07/2013, 09h43
  3. app.config dans un service Windows pour WCF
    Par matpush dans le forum Services Web
    Réponses: 1
    Dernier message: 14/05/2009, 15h52
  4. [VB.NET] Recuperer un paramettre avec App.Config
    Par Monster77 dans le forum Windows Forms
    Réponses: 21
    Dernier message: 31/12/2007, 14h06
  5. [APACHE] Config VirtualHost + hosts en Intranet
    Par jfdl dans le forum Apache
    Réponses: 9
    Dernier message: 02/09/2005, 22h41

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