Я пытаюсь заставить приложение сервера выставлять некоторую информацию о состоянии с помощью WCF.
В частности я после использования служб WCF с RESTful "API".
Я ударился о стену, когда дело доходит до потребления API 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 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?
Любая помощь с этим будет принята с благодарностью!