Я пытаюсь получить приложение сервера, чтобы выдать некоторую информацию о статусе с помощью WCF. В частности, я использую службы WCF с RESTful «API». Я бил несколько стен, когда дело доходит до потребления АНИ REST из SilverLight приложения/страницы, которую я хочу иметь в качестве дополнительного вида клиента ...Какой самый переносимый способ сделать Silverlight & Regular .NET REST-клиент
До сих пор я был успешным в определение интерфейса состояния:
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 консольного/winfoems/WPF приложения с помощью что-то вдоль линии это:
var cf = new WebChannelFactory<IStatusService>(new Uri("http://localhost:8000/server/status"));
var ss = cf.CreateChannel();
Console.WriteLine(ss.GetProgress().TimeStamp);
«стена» Я ударять, что есть НЕТ WebChannelFactory для SliverLight.
Период.
Это означает, что, когда дело доходит до SilverLight кода, мои варианты:
- Написать уродливый код с помощью WebClient, , который в конечном счете означает, что у меня будет обновить два набора кода каждый раз, когда у меня есть изменения к моему API
- Использование SOAP/WS для WebService и сохранить обновления ссылки на службу из Visual Studio
Есть ли способ сохранить «чистую» реализацию с помощью WebChannelFactory в SilverLight? Возможно, общественное достояние/open source WebChannelFactory для SilverLight?
Любая помощь с этим будет принята с благодарностью!
Прогресс на этом? – andrecarlucci 2010-12-20 13:06:59