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 :

Configuration de deux services WCF publiés par la même classe


Sujet :

Windows Communication Foundation .NET

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    488
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 488
    Points : 397
    Points
    397
    Par défaut Configuration de deux services WCF publiés par la même classe
    Bonjour,

    J'essaie d'accéder depuis une application Silverlight à un service WCF qui tourne dans un service Windows dont il utilise les données.

    Je peux accéder au service WCF depuis une application standard, mais pas depuis Silverlight à cause d'une exception de sécurité.

    J'ai donc appliqué la solution donnée ici http://blogs.msdn.com/b/carlosfiguei...dex=1#comments

    Mais je ne vois pas comment modifier mon app.config pour intégrer mon nouvel endpoint, le service ne démarre pas ou le clientaccesspolicy.xml n'existe pas.

    Pour info voici mon service:
    Code C# : 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
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
     
    namespace Sovitec.Services.Balisage
    {
        static class Service
        {
            /// <summary>
            /// The main entry point for the application.
            /// </summary>
            static void Main()
            {
                ServiceBase[] ServicesToRun;
                ServicesToRun = new ServiceBase[] 
    			{ 
    				new BalisageControlService() 
    			};
                ServiceBase.Run(ServicesToRun);
            }
        }
     
        // Define a service contract.
        [ServiceContract(Namespace = "http://Sovitec.Services.Balisage.Media")]
        public interface IMediaPlayer
        {
            [OperationContract]
            bool PlayMedia(int rendererID, string[] itemsID);
        }
     
        [ServiceContract(Namespace = "http://Sovitec.Services.Balisage.Policy")]
        public interface IPolicyRetriever
        {
            [OperationContract, WebGet(UriTemplate = "/clientaccesspolicy.xml")]
            Stream GetSilverlightPolicy();
            [OperationContract, WebGet(UriTemplate = "/crossdomain.xml")]
            Stream GetFlashPolicy();
        }
        [AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]
        public partial class BalisageControlService : ServiceBase, IMediaPlayer, IPolicyRetriever
        {
            public ServiceHost balisageServiceHost = null;
            private static Remote Remote { get; set; }
     
            public BalisageControlService()
            {
                InitializeComponent(); 
                ServiceName = "WCFBalisageWindowsService";
            }
     
            protected override void OnStart(string[] args)
            {
                if (Remote == null)
                {
                    Remote = new Dlna.Remote();
                }
     
                if (balisageServiceHost != null)
                {
                    balisageServiceHost.Close();
                }
     
                balisageServiceHost = new ServiceHost(typeof(BalisageControlService));
                balisageServiceHost.Open();
            }
     
            protected override void OnStop()
            {
                Remote = null;
     
                if (balisageServiceHost != null)
                {
                    balisageServiceHost.Close();
                    balisageServiceHost = null;
                }
            }
     
            public bool PlayMedia(int rendererID, string[] itemsID)
            {
                return Remote.PlayMedia(rendererID, itemsID);
            }
     
            public Stream GetSilverlightPolicy()
            {
                string result = @"<?xml version=""1.0"" encoding=""utf-8""?>
    <access-policy>
        <cross-domain-access>
            <policy>
                <allow-from http-request-headers=""*"">
                    <domain uri=""*""/>
                </allow-from>
                <grant-to>
                    <resource path=""/"" include-subpaths=""true""/>
                </grant-to>
            </policy>
        </cross-domain-access>
    </access-policy>";
                return StringToStream(result);
            }
     
            public Stream GetFlashPolicy()
            {
                string result = @"<?xml version=""1.0""?>
    <!DOCTYPE cross-domain-policy SYSTEM ""http://www.macromedia.com/xml/dtds/cross-domain-policy.dtd"">
    <cross-domain-policy>
        <allow-access-from domain=""*"" />
    </cross-domain-policy>";
                return StringToStream(result);
            }
     
            private Stream StringToStream(string result)
            {
                WebOperationContext.Current.OutgoingResponse.ContentType = "application/xml";
                return new MemoryStream(Encoding.UTF8.GetBytes(result));
            }
        }
    }

    et mon app.config:
    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
    <?xml version="1.0"?>
    <configuration>
      <startup>
        <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/>
      </startup>
      <system.serviceModel>
        <serviceHostingEnvironment aspNetCompatibilityEnabled="true" multipleSiteBindingsEnabled="true"/>
        <services>
          <service name="Sovitec.Services.Balisage.BalisageControlService"
                   behaviorConfiguration="BalisageControlServiceBehavior">
            <host>
              <baseAddresses>
                <add baseAddress="http://localhost:8888/SovitecServicesBalisage/service"/>
              </baseAddresses>
            </host>
            <endpoint address="null"
                      binding="webHttpBinding"
                      contract="Sovitec.Services.Balisage.IPolicyRetriever" />
            <endpoint address="toto"
                      binding="basicHttpBinding"
                      contract="Sovitec.Services.Balisage.IMediaPlayer" />
            <endpoint address="mex"
                      binding="mexHttpBinding"
                      contract="IMetadataExchange" />
          </service>
        </services>
        <behaviors>
          <serviceBehaviors>
            <behavior name="BalisageControlServiceBehavior">
              <serviceMetadata httpGetEnabled="true"/>
              <serviceDebug includeExceptionDetailInFaults="False"/>
            </behavior>
          </serviceBehaviors>
        </behaviors>
      </system.serviceModel>
    </configuration>

    Merci d'avance

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

    j'ai lu ce pas à pas de A à Z et j'ai pas de problème. J'espère que cela pourra t'aider.

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    488
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 488
    Points : 397
    Points
    397
    Par défaut
    Citation Envoyé par h2s84 Voir le message
    Salut,

    j'ai lu ce pas à pas de A à Z et j'ai pas de problème. J'espère que cela pourra t'aider.
    J'avais trouvé plusieurs pages de ce style expliquant pas à pas comment construire un service WCF que l'on peut appeler depuis Silverlight, mais aucun de suffisamment détaillé / adapté à mes contraintes pour que j'arrive à faire quelque chose de fonctionnel.

    Mais grâce à cette page j'y suis arrivé du premier coup !

    Merci beaucoup.

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 15/10/2014, 21h39
  2. Réponses: 0
    Dernier message: 20/07/2010, 17h03
  3. Différence entre un service WCF hosté par Windows Form et par service Windows
    Par BHMath76 dans le forum Windows Communication Foundation
    Réponses: 5
    Dernier message: 26/02/2010, 10h50
  4. Deux mappings pour une seule et même classe
    Par myocean dans le forum Hibernate
    Réponses: 3
    Dernier message: 18/04/2008, 16h43
  5. lier deux base de données par un même table
    Par id dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 06/02/2006, 14h28

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