Какой самый портативный способ сделать клиент Silverlight & Regular .NET REST
Я пытаюсь заставить приложение сервера выставлять некоторую информацию о состоянии, используя WCF. В частности я после использования служб WCF с RESTful "API". Я бьюсь о стену, когда дело доходит до использования API REST из приложения / страницы silverlight, которое я хочу иметь в качестве дополнительного типа клиента ...
До сих пор я успешно определял интерфейс статуса:
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();
}
Реализация этого на сервере:
[ServiceBehavior(InstanceContextMode = InstanceContextMode.Single)]
public class ServerStatusService : IStatusService
{
public StatusResultSet GetProgressAsJson()
{ return GetProgress(); }
public StatusResultSet GetProgressAsXml()
{ return GetProgress(); }
public StatusResultSet GetProgress()
{
return StatusResultSet.Empty;
}
}
Разоблачение из моего кода во время выполнения:
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();
Я даже успешно использовал службу из приложения .NET console / winfoems / WPF, используя что-то вроде этого:
var cf = new WebChannelFactory<IStatusService>(new Uri("http://localhost:8000/server/status"));
var ss = cf.CreateChannel();
Console.WriteLine(ss.GetProgress().TimeStamp);
«Стена», на которую я попадаю, в том, что для SliverLight НЕТ WebChannelFactory.
Период.
Это означает, что когда дело доходит до кода Silverlight, мои варианты:
Пишите некрасивый код, используя WebClient, что в конечном итоге означает, что мне придется обновлять два набора кода всякий раз, когда у меня есть изменения в моем APIИспользуйте SOAP / WS для WebService и продолжайте обновлять ссылку на службу из Visual StudioЕсть ли способ сохранить «чистую» реализацию с помощью WebChannelFactory в SilverLight? Возможно, публичный домен / открытый источник WebChannelFactory для SilverLight?
Любая помощь с этим будет принята с благодарностью!