【问题标题】:What is the most suitable .NET Web technology to implement this?最适合实现这一点的 .NET Web 技术是什么?
【发布时间】:2010-09-13 14:09:13
【问题描述】:

我将与第三方进行交互 - 信息交换如下。

如果我的应用是客户端,第三方是服务器,那么:

  • 服务器到客户端:我给他们一个预定义的 URL,他们使用 HTTP POST 推送数据。 POST 参数包含一个变量“xml”,请求采用专有 XML 格式。
  • 客户端到服务器:这是以类似的方式完成的,只是这次我发起了请求(与我猜的问题无关)

WCF 可以做到这一点吗?如果是这样,怎么做? 如果没有,ASP? MVC? 无论如何,请指点一下具体步骤。

谢谢

编辑:给出的响应是 HTTP 200 以及专有的 XML 响应。通常,数据流是:

服务器将请求推送到客户端服务 => 生成响应(通常会涉及客户端请求服务器执行某些操作)=> 使用响应 XML 返回 HTTP 200

【问题讨论】:

    标签: .net asp.net wcf web-services asp.net-mvc-2


    【解决方案1】:

    我会建议一些类似于 WCF REST 服务的东西。您可以将其设置为接受带有单个字符串参数的 POST 请求。然后该字符串将包含您的 XML,您可以将其加载到 XDocument 或类似的东西中以解析您的 XML。

    这可能看起来像这样:

    [OperationContract]
    [WebInvoke(Method="POST")]
    public string AcceptRequest(string Xml)
    {
      // Do something here
    }
    

    您并没有具体说明您必须对帖子做什么,或者您必须如何回复,因此根据这些要求,这可能不起作用。

    Rick Strahl 有一系列关于 WCF REST 服务的博客文章,您可以从这里开始:http://west-wind.com/weblog/posts/310747.aspx

    【讨论】:

    • +1 我喜欢让它成为 RESTful 的想法。它既会在设计中强制执行一定的纪律,又会为未来的可扩展性敞开大门。
    • @Coding Gorilla 很好的答案,我认为 REST 是要走的路
    • 我同意 RESTful 方法,但我不同意字符串类型的返回值。它将返回 Encoded XML 使用 DataContract、Xml 可序列化类型或 XElement。
    • 字符串的返回类型只是为了演示目的,正如我提到的,我不确定他对响应的要求是什么。
    • 谢谢,您的回答更加具体。响应也将是专有 XML,具有确认它所必需的 HTTP 200 状态。我也可以使用 WCF REST 来实现这一点吗?
    【解决方案2】:

    我真的很想知道您为什么在 2010 年使用老式 Web 服务(通过自定义 HTTP 端点自定义 XML)。也就是说,我认为在这种情况下您可能想要:

    a) Ye olde plain IHttpHandler 接受原始输入并返回响应。
    b) 一个 ASP.NET MVC 应用在专用控制器上做同样的事情。

    决定确实会受到您需要使用此应用程序部署的其他内容的驱动,但任何一个都可以工作。这里的 Kickers 是响应是同步的,并且领域是相对集中的。

    我认为您可以使用 WCF 实现这一目标,但这会给真正简单的操作增加如此多的配置复杂性,因此最好避免使用它。

    【讨论】:

    • 感谢 Wyatt - 我同意 WCF 增加的复杂性,特别是因为我还没有接受过相关培训。我不确定您所说的“您还需要使用此应用程序部署什么”是什么意思 - 它会收到一个请求并可能立即确认/响应并将其添加到处理队列中,该队列将依次执行需要完成的操作并发送客户端-服务器请求。我希望这是有道理的。你会推荐这两种选择中的哪一种?我应该买什么样的书来了解它?
    • “您还需要使用此应用程序部署什么”我的意思是“是否还有其他 Web 组件,例如文档、客户端站点、管理工具?”主要是因为在服务方面,它是一种清洗,但其他组件可能会推动它做几件事中的一件。 . .
    • 哦,错过了书的部分。不知道什么会好,但我只是阅读了 IHttpHandlers 上的文档并从那里开始。它们非常简单,直到您为了自己的利益而变得过于花哨。 . .
    【解决方案3】:

    我会看看 WCF,但不知道你在做什么的详细细节我可以告诉你。

    Windows Communication Foundation (WCF) 是为在托管服务和客户端之间进行通信而创建的,因此它应该完全符合您的要求。

    更多信息在这里MSDN WCF

    【讨论】:

      【解决方案4】:

      我不相信你可以用 WCF 做到这一点,虽然我不是 WCF 专家......如果是我,我会创建一个 ASP.Net ashx 文件来接收数据,然后创建一个 aspx 页面,其中您可以使用 WebClient 或类似的方式进行文件上传/发送。

      【讨论】:

      • 可以通过WCF收发数据
      • @msarchet 当然您可以通过 WCF 发送和接收数据,我只是不确定您是否可以指定它应该是 POST 和参数名称。不过,看起来 Coding Gorilla 的帖子不错。
      【解决方案5】:

      恕我直言,您在这里混合了不同的技术。

      当然您可以使用经典的 asp.net、asp.net mvc 和 WCF 来执行此操作,但它引出了一个问题:您需要如何运行它?特别是您发起的请求,何时发起?

      WCF 专为通信场景而设计,因此它可能是您拥有的最灵活的选项。没有提到的是响应您在您身边发起请求所需的内容。

      它可能是您向某人展示的页面的一部分,在这种情况下,您还希望 asp.net (mvc) 启动该操作。它可能需要作为服务运行,在这种情况下,您可以坚持使用仅 WCF 的解决方案。它可能需要从客户端应用程序启动,在这种情况下,您还需要该应用程序。

      上面说了,如果你已经需要做asp.net(mvc),而且交换很简单,不引入WCF也可以。少学点。

      最后,如果 HTTP POST + xml 不仅仅是一个自定义的东西,而是一个 Web 服务调用,您可能希望坚持使用 WCF 来接收请求。特别是您可能需要其他 WS 组件,例如 WS-Security。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-06-15
        • 2011-03-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-11-11
        • 2012-01-12
        相关资源
        最近更新 更多