Ich versuche, eine Server-Anwendung zu erhalten, um einige Statusinformationen mit WCF verfügbar zu machen. Insbesondere bin ich nach WCF-Dienste mit RESTful "API" verwenden. Ich schlage etwas von einer Wand, wenn es um Konsum die REST-API von einer Silverlight- app/Seite, die ich als eine zusätzliche Art von Client ...Was ist der portabelste Weg, um einen Silverlight & Regular .NET REST-Client zu erstellen?
I Bisher haben will kommt schon erfolgreich in eine Status-Schnittstelle zu definieren:
public static class StatusUriTemplates
{
public const string Status = "/current-status";
public const string StatusJson = "/current-status/json";
public const string StatusXml = "/current-status/xml";
}
[ServiceContract]
public interface IStatusService
{
[OperationContract]
[WebGet(ResponseFormat = WebMessageFormat.Json, UriTemplate = StatusUriTemplates.StatusJson)]
StatusResultSet GetProgressAsJson();
[OperationContract]
[WebGet(ResponseFormat = WebMessageFormat.Xml, UriTemplate = StatusUriTemplates.StatusXml)]
StatusResultSet GetProgressAsXml();
[OperationContract]
[WebGet(UriTemplate = StatusUriTemplates.Status)]
StatusResultSet GetProgress();
}
es in dem Server-Implementierung:
[ServiceBehavior(InstanceContextMode = InstanceContextMode.Single)]
public class ServerStatusService : IStatusService
{
public StatusResultSet GetProgressAsJson()
{ return GetProgress(); }
public StatusResultSet GetProgressAsXml()
{ return GetProgress(); }
public StatusResultSet GetProgress()
{
return StatusResultSet.Empty;
}
}
es von meinem Code zur Laufzeit freilegen:
var service = new ServerStatusService();
var binding = new WebHttpBinding();
var behavior = new WebHttpBehavior();
var host = new WebServiceHost(service, new Uri("http://localhost:8000/server"));
host.AddServiceEndpoint(typeof(IStatusService), binding, "status");
host.Open();
Ich habe sogar erfolgreich den Dienst von einer .NET-Konsole/winfoems/WPF-Anwendung mit etwas entlang der Linie dieses mit raubend:
var cf = new WebChannelFactory<IStatusService>(new Uri("http://localhost:8000/server/status"));
var ss = cf.CreateChannel();
Console.WriteLine(ss.GetProgress().TimeStamp);
Die „Wand“ Ich bin schlagen ist, dass es ist KEINE WebChannelFactory für SliverLight.
Zeitraum.
Dies bedeutet, dass, wenn es um Silverlight-Code kommt, meine Optionen sind:
- schreiben hässlich Code WebClient, was letztlich bedeutet, dass ich haben zwei Sätze von Code zu aktualisieren, wenn ich eine Änderung haben zu meiner API
- Verwenden SOAP/WS für die WebService und halten den Dienstverweis von Visual Studio
Gibt es eine Möglichkeit, die "saubere" Implementierung mit WebChannelFactory in SilverLight beizubehalten? Vielleicht eine Public Domain/Open Source WebChannelFactory für SilverLight?
Jede Hilfe mit diesem wird sehr geschätzt werden!
Irgendein Fortschritt auf diesem? – andrecarlucci