【问题标题】:WCF with ASP.NET Web API带有 ASP.NET Web API 的 WCF
【发布时间】:2015-07-10 16:53:53
【问题描述】:

我有一个 WCF 服务需要支持带有 JSON 的 HTTP 请求,但默认的序列化程序 (DataContractSerializer) 不能很好地完成这项工作。这些天我读到了 Web API 是要走的路,但是我遇到的所有示例都需要使用模型并且只能使用简单的 CRUD 操作。我的 WCF 服务执行的不仅仅是 CRUD 操作。它还接受/返回数据类型,如字典列表。关于我应该如何处理这个问题的任何建议?

【问题讨论】:

  • WCF 对于 json 字典来说真的很痛苦。我已经转移到 Web Api,它处理序列化(使用 newtonsoft)和反序列化非常好,非常直观。

标签: wcf asp.net-web-api


【解决方案1】:

...默认的序列化程序 (DataContractSerializer) 只是不执行 工作很好

DataContractJsonSerializer 哪些工作做得不好?我没有任何问题。无论如何,如果您想将其换成 JSON.net,请参阅 herehere 的说明。

我读到 Web API 是这些天要走的路

这是有争议的。如果您只想要一个 HTTP api,那么像 Nancy 这样的平台比 WebAPI 更容易使用。但是您通常是正确的,WebApi 优于 WCF webHttpBinding。

...仅适用于简单的 CRUD 操作。我的 WCF 服务执行更多 比 CRUD 操作

这是不正确的,WebAPI 可以以更 RPC 风格的方式使用。例如,您可以这样做:

[AcceptVerbs("POST")]
public HttpResponseMessage DoSomeAction(Something actionParams)
{
    ...

    return new HttpResponseMessage(HttpStatusCode.OK)
    {
        Content = new StringContent("Action done")
    };
}

只是这种方式违背了 REST 原则,这就是为什么你看到的样本一般不会包含这种服务操作的原因。

至于推荐的方法,我的优先顺序是:

  • Nancy 作为首选,托管在 Windows 服务中
  • WebApi(如果有 IIS 托管要求)
  • 如果没有 IIS 要求并且您已经在 WCF 上投入了大量资金,则使用 WebHttpBinding

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-03-16
    • 1970-01-01
    • 2014-07-10
    • 1970-01-01
    • 1970-01-01
    • 2012-03-10
    • 2012-05-30
    相关资源
    最近更新 更多