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
Partager