【问题标题】:Calling web service without using a post back在不使用回发的情况下调用 Web 服务
【发布时间】:2014-09-11 22:55:17
【问题描述】:

我需要通过 asp.net 应用程序中的页面调用跨域 Web 服务 (.asmx)。用户将输入一个搜索查询,应用程序将在其中发送到 Web 服务,然后页面将使用数据进行更新。

我的问题是我如何在没有回发的情况下做到这一点?因为我只是想检索数据而不是输入或操作它。

我尝试的解决方案:
1. Ajax via jquery -> 问题:不支持CORS。
2. serviceReference(用于客户端服务调用),但这仅适用于本地(域上)服务
3. 最后,我尝试使用 updatepanel,其中文本框中的值用于查询 Web 服务,但这显然会强制部分回发,有没有办法让更新面板使用 get req 代替?如果没有,我怎么会这样做,因为我被卡住了!最后,如果是 ASP MVC 结构,这个解决方案会更容易吗?我在学习。谢谢。

【问题讨论】:

  • 相当肯定 .asmx Web 服务只允许 Posts(顺便说一句,这与 .net 中的 Post Back 非常不同)。所以你可以通过 jQuery 做一个帖子。
  • 要么让页面进行更新面板发布,要么调用页面方法或服务,然后调用外部服务。跨域服务可以从服务器完成。
  • @PhilipPittle 尝试过,但由于不支持跨域资源共享,我遇到了问题,这非常令人沮丧。
  • @user3311351 - 是的,如果您尝试使用不同域中的服务,javascript 可能会抱怨。解决方案是在本地服务器上创建一个代理来调用其他域。

标签: c# asp.net ajax asp.net-mvc web-services


【解决方案1】:

创建一个 ashx 处理程序,它根据 ajax 传递的参数查询远程服务。
对 ashx 处理程序使用 ajax 请求,通过 jQuery AJAX 调用您的代理。

或者只使用 Yahoo YQL 代理:
Is there a free JSON proxy server which supports CORS or JSONP?

或者如果web-service支持JSONP,你可以直接使用JSONP

如果您需要自己创建代理,方法如下:
http://www.codeproject.com/Articles/25218/Fast-Scalable-Streaming-AJAX-Proxy-continuously-de

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-12-23
    • 2011-04-11
    • 2016-02-14
    • 1970-01-01
    • 2017-07-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多