我有一个.net网络服务,需要一些xml数据。
在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>";
}
我已经查找了这种情况的示例,或者从服务中异步调用网页并返回的方法。有人能指出我这个模式还是一个例子?
由于
麦克
答案 0 :(得分:3)
不幸的是,如果您无法控制客户端应用程序,那么这是不可能的。从客户端应用程序端想一想。
Web服务(我猜这种情况下的SOAP)是为了方便而使用http,但实际上是数据调用,它们不是网页。因此,客户端应用程序没有义务尊重重定向到网站,这实际上是协议跳转。我猜大多数SOAP库都会遵循302重定向,假设他们试图调用的数据服务已经移动,所以仍然期望在新URI上找到数据服务。
假设客户端也是某种应用程序(即,不是在浏览器中运行的javascript),它甚至可能无法呈现网页,因此必须启动浏览器。
如果你不控制客户端,但是控制协议/接口,你可能能够定义一个返回类型,你希望客户端启动浏览器,但这基本上只是要求客户端实现者做什么你不能直接。
答案 1 :(得分:0)
您不能这样做是因为客户端期望XML响应(Web服务的全部要点)。您无法强制客户端执行与服务器端完全不同的操作(即打开一个全新的应用程序,即浏览器) 客户端应用程序需要更改。
编辑:
如果Web服务返回显示给用户的消息,您可以返回类似“请转到[URL]以查看结果”的内容,并希望用户按照您的说明进行操作。