Какой самый портативный способ сделать клиент 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?

Любая помощь с этим будет принята с благодарностью!

Ответы на вопрос(5)

Ваш ответ на вопрос