【问题标题】:Redirecting to a Web Page from a Web Service call从 Web 服务调用重定向到网页
【发布时间】:2010-01-18 23:05:15
【问题描述】:

我有一个需要一些 xml 数据的 .net Web 服务。

我想在 Web 服务中处理数据,然后调用一个向用户显示信息的网页。 Web 服务应在跨越网页后返回。

我没有任何运气这样做。

我已经尝试过 Server.Transfer(url, end);这会产生异常,因为我的退货已因转移而被破坏: 客户端发现响应内容类型为 'text/html; charset=utf-8',但应为 'text/xml'。

我也尝试过 Context.Response.Redirect(url, end);这会生成 302 异常(对象已移动)。

我看到了关于如何处理 302 错误的各种描述。但是我无法控制客户端。在这种情况下,我的服务将从 java 应用程序调用,因此我无法在进行 Web 服务调用之前包装客户端调用。我需要在 asmx 中进行。

// this is very basic but the general gist
[WebMethod]
public string MyRequest(string someXML)
{
    // process the xml, dump do database, invoke aspx page

    string url = "xxxx.aspx";
    bool end = false;

    Server.Transfer(url, end);
    //this.Context.Response.Redirect(url, end);

    return "<retcode>somecode</retcode>";
}

我已经寻找了这种情况的示例或从服务中异步调用网页并返回的方法。任何人都可以指出这种模式或示例吗?

谢谢

迈克

【问题讨论】:

    标签: .net web-services redirect


    【解决方案1】:

    不幸的是,如果您无法控制客户端应用程序,这将是不可能的。从客户端应用端考虑。

    Web 服务(在这种情况下我猜是 SOAP)为了方便而通过 http,但实际上是数据调用,它们不是网页。因此,客户端应用程序没有义务遵守对网站的重定向,这实际上是协议跳转。我猜大多数 SOAP 库会遵循 302 重定向,假设他们尝试调用的数据服务已经移动,因此仍然希望在新 URI 上找到数据服务。

    假设客户端也是某种应用程序(即,不是在浏览器中运行的 javascript),它可能甚至无法呈现网页,因此必须启动浏览器。

    如果您不控制客户端,但控制协议/接口,您也许可以定义一个返回类型,您希望客户端启动浏览器,但这基本上只是要求客户端实现者这样做你不能直接做什么。

    【讨论】:

      【解决方案2】:

      您不能这样做,因为客户端期待 XML 响应(Web 服务的全部意义)。您不能强迫客户端做与服务器端完全不同的事情(即打开一个全新的应用程序,作为浏览器)。
      需要更改客户端应用程序。

      编辑:
      如果 Web 服务返回一条显示给用户的消息,您可以返回类似“请转到 [URL] 以查看结果”之类的内容,并希望用户遵循您的指示。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-06-11
        • 1970-01-01
        相关资源
        最近更新 更多