gpt4 book ai didi

.net - 制作 Silverlight 和常规 .NET REST 客户端的最便携方式是什么

转载 作者:行者123 更新时间:2023-12-04 20:26:20 24 4
gpt4 key购买 nike

我正在尝试让服务器应用程序使用 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<IStatusService>(new Uri("http://localhost:8000/server/status"));
var ss = cf.CreateChannel();
Console.WriteLine(ss.GetProgress().TimeStamp);

我要打的“墙”是 SliverLight 没有 WebChannelFactory。

时期。

这意味着当涉及到 silverlight 代码时,我的选择是:
  • 使用 WebClient 编写丑陋的代码,
    这最终意味着我将拥有
    随时更新两组代码
    我的 API 有更改
  • 对 WebService 使用 SOAP/WS 并保持
    更新服务引用
    Visual Studio

  • 有没有办法在 SilverLight 中使用 WebChannelFactory 保持“干净”的实现?
    或许是 SilverLight 的公共(public)领域/开源 WebChannelFactory?

    对此的任何帮助将不胜感激!

    最佳答案

    我几乎不想建议它,但您对 reimplementing the WebChannelFactory<T> class 感到满意吗? ?

    粗略浏览一下 Silverlight API,您似乎不会从 Microsoft 开箱即用地获得太多帮助。您需要为它重新实现一个 channel 类和一个工厂。

    也许创建 channel 并将自己与特定于平台的代码隔离开来的另一种方法是创建它的自定义实现?具体而言,我的意思是,您创建了另一个工厂类,并且工厂类在可用时调用 WebChannelFactory,或者为您进行设置。

    抱歉,我没有更深入的建议。 :)

    关于.net - 制作 Silverlight 和常规 .NET REST 客户端的最便携方式是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/277623/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com