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