当前位置:  开发笔记 > 编程语言 > 正文

什么是制作Silverlight和Regular .NET REST客户端最便携的方法

如何解决《什么是制作Silverlight和Regular.NETREST客户端最便携的方法》经验,为你挑选了0个好方法。

我试图让服务器应用程序使用WCF公开一些状态信息.特别是我在使用RESTful"API"的WCF服务之后.当我从一个Silverlight应用程序/页面中使用REST api时,我正在尝试使用另一种类型的客户端...

到目前为止,我已经成功定义了一个状态界面:

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(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更新服务引用

有没有办法在SilverLight中使用WebChannelFactory保持"干净"的实现?也许SilverLight的公共域/开源WebChannelFactory?

任何有关这方面的帮助将不胜感激!

推荐阅读
135369一生真爱_890
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有