我想讓服務器應用程序使用WCF公開一些狀態信息。 特別是我使用RESTful「API」使用WCF服務之後。 當我想要從Silverlight 應用/頁面中消費REST API時,我想要作爲一種附加類型的客戶端...什麼是製作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;
}
}
在運行時從我的代碼將它暴露
我甚至已經成功使用的東西沿着該線從.NET控制檯/ 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的代碼,我的選擇是:使用Web客戶端, 這最終意味着我將有 更新兩套代碼每當 我有一個變化
- 寫醜陋的代碼我的API
- 使用SOAP/WS爲WebService,並保持 從 更新服務引用的Visual Studio
有沒有辦法在SilverLight中使用WebChannelFactory保持「乾淨」的實現? 也許是SilverLight的公共領域/開源WebChannelFactory?
任何幫助,將不勝感激!
這方面的進展如何? – andrecarlucci 2010-12-20 13:06:59