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 :

Problème utilisation Service depuis l'Extérieur


Sujet :

Windows Communication Foundation .NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Invité
    Invité(e)
    Par défaut Problème utilisation Service depuis l'Extérieur
    Bonjour,

    Je développe un Service WCF dans le cadre de mon travail. Pour bien vous situer le contexte, mon Service est hébergé sur une machine équipée de Windows Server 2008 R2 avec IIS 7 (WAS).

    Mon Service WCF est exposé via 3 endpoints :

    - un en SOAP
    - deux en REST : POX et JSON

    Voici le fichier de configuration Web.Config du Service :

    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
    <system.serviceModel>
        
        <serviceHostingEnvironment aspNetCompatibilityEnabled="true" />
        <services>
          <service name="Solution.WCFService.MonService" behaviorConfiguration="MetadataWSDL">
            <host>
              <baseAddresses>
                <add baseAddress="https://adresse-site"/>
              </baseAddresses>
            </host>
            <endpoint address="SOAP"
                      binding="basicHttpBinding"
                      contract="Solution.ServiceContract.IMonService"
                      bindingConfiguration="soapBinding" />
            <endpoint address="POX"
                      binding="webHttpBinding"
                      contract="Solution.ServiceContract.IMonService"
                      behaviorConfiguration="PoxBehavior"
                      bindingConfiguration="webBinding" />
            <endpoint address="JSON"
                     binding="webHttpBinding"
                     contract="Solution.ServiceContract.IMonService"
                     behaviorConfiguration="JsonBehavior"
                     bindingConfiguration="webBinding" />
          </service>
        </services>
    
        <!-- bindings -->
        <bindings>
          <!-- SOAP -->
          <basicHttpBinding>
            <binding name="soapBinding" >
              <security mode="TransportWithMessageCredential"  >
                <transport clientCredentialType="Basic" />
                <message clientCredentialType="UserName" />
              </security>
            </binding>
          </basicHttpBinding>
          <!-- REST -->
          <webHttpBinding>
            <binding name="webBinding">
              <security mode="Transport" >
              </security>
            </binding>
          </webHttpBinding>
        </bindings>
    
        <!-- behaviors -->
        <behaviors>
          <endpointBehaviors>
            <!-- plain old XML -->
            <behavior name="PoxBehavior">
              <webHttp />
            </behavior>
            <!-- JSON -->
            <behavior name="JsonBehavior">
              <enableWebScript  />
            </behavior>
          </endpointBehaviors>
          <serviceBehaviors>
              <behavior name="MetadataWSDL">
                <serviceCredentials>
                  <userNameAuthentication customUserNamePasswordValidatorType="Solution.WCFService.CustomUserNameValidator, Solution.WCFService" userNamePasswordValidationMode="Custom" />
                </serviceCredentials>
                <serviceMetadata httpsGetEnabled="true" httpGetEnabled="true" />
                <serviceDebug includeExceptionDetailInFaults="true" />
                <dataContractSerializer maxItemsInObjectGraph="6553600"/>
              </behavior>
          </serviceBehaviors>
        </behaviors>
        
      </system.serviceModel>
    Après avoir placé les bons fichiers sur le Serveur (web.Config, MonService.svc, ...), voilà ce que j'obtient en accédant au Service via IE :

    Vous avez créé un service.

    Pour tester ce service, vous allez devoir créer un client et l’utiliser pour appeler le service. Pour ce faire, vous pouvez utiliser l’outil svcutil.exe à partir de la ligne de commande avec la syntaxe suivante :

    svcutil.exe https://nom-machine-et-domaine/MonService.svc?wsdl
    Le premier problème, c'est que l'adresse indiquée utilise le nom de la machine avec son domaine au lieu de l'adresse du site web. C'est un peu embétant. Comment peut on y remédier ?

    Si je modifie l'adresse donnée en remplacant le nom de la machine par l'adresse du site, j'accède bien aux Métadonnées WSDL :

    https://adresse-site/MonService.svc?wsdl
    au lieu de
    https://nom-machine-et-domaine/MonService.svc?wsdl

    Dans ce fichier WSDL, je peux également remarqué qu'à plusieurs reprises, des adresses utilisent le nom de la machine au lieu de l'adresse du site. Par exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <wsdl:import namespace="https://adresse-site/MonServices/2010/03" location="https://nom-de-la-machine/MonService.svc?wsdl=wsdl0" />
    Comment y remédier ?

    Le problème est que si j'essaye d'accéder au Service WCF depuis l'extérieur (en local, tout fonctionne), je ne peux pas ajouter de référence avec l'outil de Visual Studio 2008 / 2010. J'ai systèmatiquement une erreur qui semble être causée par les adresses composée de nom-de-la-machine qu'il n'arrive pas à ressoudre. Ca semble normal puisque ces adresses ne sont utilisables que depuis le réseau de l'entreprise.

    Voici l'erreur complète indiquée par Visual Studio :

    The document was understood, but it could not be processed.
    - The WSDL document contains links that could not be resolved.
    - There was an error downloading 'https://nom-de-la-mahcine-et-domaine/MonService.svc?wsdl=wsdl0'.
    - The remote name could not be resolved: 'nom-de-la-mahcine-et-domaine'
    Metadata contains a reference that cannot be resolved: 'https://adresse-site/MonService.svc?wsdl'.
    There was no endpoint listening at https://adresse-site/MonService.svc?wsdl that could accept the message. This is often caused by an incorrect address or SOAP action. See InnerException, if present, for more details.
    The remote server returned an error: (404) Not Found.
    If the service is defined in the current solution, try building the solution and adding the service reference again.
    La partie suivante semble indiquer que c'est bien l'adresse avec le nom de la machine qui pose problème :

    The remote name could not be resolved: 'nom-de-la-mahcine-et-domaine'
    A l'heure actuelle, le Service WCF est donc inutilisable depuis l'extérieur. A noter que j'ai pas essayé de consommer le Service sans générer automatiquement le Proxy.

    J'espère que quelqu'un sera en mesure de m'aider. Une de nos idées est de sortir le Serveur du Domaine pour changer son nom afin de lui donner comme nom l'adresse du site. Est-ce une bonne solution ?

    Merci d'avance pour votre aide.

    A titre informatif, voici des extraits de mon Interface et de son implémentation :

    Interface IMonService :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    [ServiceContract(Namespace = "https://adresse-site/MonServices/2010/03")]
        public interface IMonService
        {
            [WebGet()]
            [OperationContract()]
            WorkIssueResponse<bool> CheckEligibilityCustomer(string CustomerLogin);
    
    ....
        }
    Fichier MonService (implémentation de l'interface) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    [AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]
        public class MonService : IMonService
        {
     
            public WorkIssueResponse<bool> CheckEligibilityCustomer(string CustomerLogin)
            {
                return this._DataLayer.CheckEligibilityCustomer(CustomerLogin);
            }
    Dernière modification par Deepin ; 09/03/2010 à 13h01. Motif: Balises [QUOTE]...[/QUOTE] au lieu de [CODE]...[/CODE]

Discussions similaires

  1. [WS 2008 R2] [RDweb et TS gateway] Problème accès rdweb depuis l'extérieur
    Par alex_m94 dans le forum Windows Serveur
    Réponses: 5
    Dernier message: 02/05/2014, 14h22
  2. Problème utilisation web service popFax
    Par le_viking dans le forum Web & réseau
    Réponses: 0
    Dernier message: 04/01/2012, 14h35
  3. Utiliser un Web Service depuis silverlight
    Par jubourbon dans le forum C#
    Réponses: 2
    Dernier message: 25/06/2010, 10h03
  4. Problèmes d'accès depuis l'extérieur
    Par roms19 dans le forum Windows Serveur
    Réponses: 1
    Dernier message: 17/01/2008, 13h44
  5. Réponses: 2
    Dernier message: 04/11/2007, 12h28

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