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

Silverlight Discussion :

Impossible d'accéder à mon WCF(hébergé dans Windows Service) via Silverlight


Sujet :

Silverlight

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2006
    Messages : 35
    Points : 17
    Points
    17
    Par défaut Impossible d'accéder à mon WCF(hébergé dans Windows Service) via Silverlight
    Bonjour à tous,
    après avoir consulté des dizaines et des dizaines de sites concernant le Silverlight et le WCF je n'arrive toujours pas à trouver une solution à mon problème. La plupart utilisent IIS pour leur WCF, contrairement à moi qui l'héberge sur ma machine dans un service Windows...

    Mon problème actuel est que je reçois une erreur lorsque je tente d'accéder à un service de mon WCF qui est hébergé dans un Service Windows local sur le port 25000.
    Une erreur s'est produite en tentant d'effectuer une demande à l'URI 'http://localhost:25000/service/'. Ce problème peut être dû à une tentative d'accès à un service entre domaines sans qu'une stratégie entre domaines appropriée soit en place, ou une stratégie inadaptée aux services SOAP. Il est possible que vous soyez contraint de contacter le propriétaire du service pour publier un fichier de stratégie entre domaines et veiller à ce qu'il autorise l'envoi d'en-têtes HTTP SOAP. Cette erreur peut également être liée à l'utilisation de types internes dans le proxy de service Web sans utiliser l'attribut InternalsVisibleToAttribute. Consultez l'exception interne pour plus de détails.

    System.Security.SecurityException ---> System.Security.SecurityException:

    Erreur de sécurité.
    à System.Net.Browser.BrowserHttpWebRequest.InternalEndGetResponse(IAsyncResult asyncResult)
    à System.Net.Browser.BrowserHttpWebRequest.<>c__DisplayClass5.<EndGetResponse>b__4(Object sendState)
    à System.Net.Browser.AsyncHelper.<>c__DisplayClass2.<BeginOnUI>b__0(Object sendState)
    --- Fin de la trace de la pile d'exception interne ---
    à System.Net.Browser.AsyncHelper.BeginOnUI(SendOrPostCallback beginMethod, Object state)
    à System.Net.Browser.BrowserHttpWebRequest.EndGetResponse(IAsyncResult asyncResult)
    à System.ServiceModel.Channels.HttpChannelFactory.HttpRequestChannel.HttpChannelAsyncRequest.CompleteGetResponse(IAsyncResult result)
    J'ai lu sur beaucoup de sites qu'il fallait ajouter un "crossdomain.xml".
    Dans VS2010 j'ai une solution qui contient un projet WcfService1 avec inclus dedans mon MyWcfService.svc, mais également un projet MonServiceHebergeur qui représente mon service windows situé au port 25000 si j'ai bien compris?

    J'inclus donc le fichier crossdomain.xml dans le projet qui contient mon service .svc, c-à-d WcfService1.

    Le problème c'est que je n'arrive pas à accéder à ce fichier par le net.
    J'ai accès à la WSDL de mon service via "http://localhost:25000/service/?wsdl", donc je tente d'ouvrir le crossdomain.xml via "http://localhost:25000/service/crossdomain.xml" mais rien n'y fait.

    J'ai également lu qu'il fallait mettre le crossdomain.xml à la racine, mais j'aimerais d'abord pouvoir vérifier que mon crossdomain.xml est bel et bien accessible avant de modifier l'adresse de mon service (si c'est bien cela qu'il faut que je fasse?).

    Merci à vous,

    Patrick

  2. #2
    Rédacteur
    Avatar de Nathanael Marchand
    Homme Profil pro
    Expert .Net So@t
    Inscrit en
    Octobre 2008
    Messages
    3 615
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Expert .Net So@t
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2008
    Messages : 3 615
    Points : 8 080
    Points
    8 080
    Par défaut
    Le cross-domain doit se trouver à l'adresse http://localhost:25000/crossdomain.xml

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2006
    Messages : 35
    Points : 17
    Points
    17
    Par défaut
    Bien, merci de me confirmer ce que j'ai lu .

    Sinon, comment puis-je m'assurer que le crossdomain est bel et bien existant? Je l'ai inclus dans mon projet qui contient MyWebService.svc, il est donc hébergé à l'adresse http://localhost:25000/service/ comme je l'ai indiqué dans mon fichier de configuration.
    Comment puis-je faire pour y accéder? Si j'essaie avec FireFox d'entrer l'URL http://localhost:25000/service/crossdomain.xml ça ne fonctionne pas.
    Si mon service est hébergé à "/service/" est-il possible d'avoir le fichier crossdomain.xml qui se situe à "/" ?

    EDIT:
    Voici mon fichier crossdomain.xml
    Code xml : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <?xml version="1.0"?>
    <!DOCTYPE cross-domain-policy SYSTEM "http://www.macromedia.com/xml/dtds/cross-domain-policy.dtd">
    <cross-domain-policy>
      <allow-http-request-headers-from domain="*" headers="SOAPAction,Content-Type"/>
    </cross-domain-policy>

    Ainsi que la config de mon Service Windows, celui qui héberge MyWebService.svc :
    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
    <?xml version="1.0"?>
    <configuration>
      <system.serviceModel>
        <bindings/>
        <client/>
        <services>
          <service name="WcfService1.MyWcfService" behaviorConfiguration="WcfService1.MyWcfServiceBehaviours">
            <host>
              <baseAddresses>
                <add baseAddress="http://localhost:25000/service/"/>
              </baseAddresses>
            </host>
            <!-- this endpoint is exposed at the base address provided by host: http://localhost:8000/ServiceModelSamples/service  -->
            <endpoint address="" binding="basicHttpBinding" contract="WcfService1.IMyWcfServiceEvaluation1"/>
            <endpoint address="" binding="basicHttpBinding" contract="WcfService1.IMyWcfServiceExamen"/>
          </service>
        </services>
        <behaviors>
          <serviceBehaviors>
            <behavior name="WcfService1.MyWcfServiceBehaviours">
              <serviceMetadata httpGetEnabled="true"/>
              <!--<serviceDebug includeExceptionDetailInFaults="false"/>-->
            </behavior>
          </serviceBehaviors>
        </behaviors>
      </system.serviceModel>
    <startup><supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/></startup></configuration>

    EDIT2: le crossdomain.xml doit se situer côté SiteWeb ou côté WCF?
    Mon site web ASP contient une page ASPX qui utilise une application Silverlight. Pour le moment mon cross domain se situe du côté de mon WCF car j'ai lu qu'il fallait le mettre à la racine de mon service. Mais peut-être est-ce à la racine de mon Site?

  4. #4
    Membre actif
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Septembre 2006
    Messages
    389
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Septembre 2006
    Messages : 389
    Points : 244
    Points
    244
    Par défaut
    Slt

    Le fichier crossdomain doit se situé sur ton serveur dans le dossier inetpub / wwwroot

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2006
    Messages : 35
    Points : 17
    Points
    17
    Par défaut
    Je n'utilise pas d'IIS, j'accède à mon site par Visual Studio en poussant F5, ça me démarre un "Serveur de Développement ASP.NET" automatiquement avec un port généré aléatoirement.

    Je ne vois pas où je dois placer mon crossdomain.xml et clientaccesspolicy.xml. Je l'ai actuellement placé dans mon service WCF mais je doute que ça soit là qu'il doit être.

    J'ai un site web ASP.NET, il intègre un élément SilverLight qui se charge de contacter mon WCF pour récupérer des informations de ma base de données.
    Mon service WCF fonctionne très bien avec une application WPF.

  6. #6
    Invité
    Invité(e)
    Par défaut
    Salut,

    J'ai effectivement eu le même problème que toi (Silverlight + WCF) et ce tuto joli et bien fait m'a beaucoup aidé à le résoudre.

    PS: WCF est hébergé par une application console. Cela est le problème est le même qu'il soit hébergé par un service windows.

  7. #7
    Membre actif
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    159
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2009
    Messages : 159
    Points : 259
    Points
    259
    Par défaut
    Hello,

    C'est effectivement un problème de cross domain. Il faut donc que ton service WCF même hébergé dans un service NT soit capable de cracher le fichier XML de policies sur un appel à la racine de ton serveur WCF.

    Perso, j'ai déjà fait et décrit cela dans cette série d'articles sur MSDN : http://msdn.microsoft.com/fr-fr/office/dd572039.aspx et plus précisement ici : http://msdn.microsoft.com/fr-fr/office/dd572044

    Bye,

    David Rousset
    Microsoft France

  8. #8
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par davrous Voir le message
    Hello,

    C'est effectivement un problème de cross domain. Il faut donc que ton service WCF même hébergé dans un service NT soit capable de cracher le fichier XML de policies sur un appel à la racine de ton serveur WCF.
    Exactement ça. Bon le lien que j'ai fournit est un tuto en anglais. Mais si tu veux du Français pour aller le vite et t'éviter la traduction à la volée, les tutos de davrous sont aussi bien faits.

  9. #9
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2006
    Messages : 35
    Points : 17
    Points
    17
    Par défaut
    Ca tourne !

    L'endroit où devait se situer mon Policy m'était fort flou, mais tout s'est éclairci grâce à vos deux tutos.
    J'ai penché pour le second, de davrous, car il était en français et m'a l'air plus récent.

    Mon Policy est accessible via la méthode GetSilverlightPolicy qui est annotée d'un WebGet(UriTemplate = "/clientaccesspolicy.xml") et qui retourne le fichier XML sous forme d'un Stream. Le XML est donc écrit en brut dans mon WCF!

    J'ignore pourquoi on parle de crossdomain sur certains sites, est-ce si mon WCF tourne sur une machine différente? Car dans les tutoriaux apparemment cela concerne le flash

    Encore un grand merci à vous

  10. #10
    Membre émérite
    Avatar de Samuel Blanchard
    Homme Profil pro
    Expert .NET
    Inscrit en
    Février 2010
    Messages
    1 504
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France

    Informations professionnelles :
    Activité : Expert .NET

    Informations forums :
    Inscription : Février 2010
    Messages : 1 504
    Points : 2 682
    Points
    2 682
    Par défaut
    J'ignore pourquoi on parle de crossdomain, est-ce si mon WCF tourne sur une machine différente?
    On parle de CrossDomain lorsque ton appli silverlight est sur un domaine different du service WCF appelé.
    .
    Pas de question technique en MP, merci.
    .
    Un emulator Gameboy Color pour Windows Phone ?
    c'est moi qui l'ai fait

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

Discussions similaires

  1. [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
  2. [EJB3] [JSF] Impossible d'accéder à mon EJB local..
    Par petrone dans le forum Java EE
    Réponses: 8
    Dernier message: 10/02/2009, 10h53
  3. Impossible d'accéder à mon site de certains endroits
    Par libuma dans le forum Hébergement
    Réponses: 7
    Dernier message: 31/12/2008, 16h07
  4. DataTemplate : Impossible d'accéder à mon objet
    Par seiryujay dans le forum Windows Presentation Foundation
    Réponses: 2
    Dernier message: 24/10/2008, 11h24
  5. WCF hébergé dans un service - Windows Vista
    Par Aurélien19 dans le forum Windows Communication Foundation
    Réponses: 3
    Dernier message: 11/10/2008, 14h00

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