jquery跨域发布到没有代理的wcf服务

时间:2011-01-20 17:54:38

标签: .net jquery ajax wcf cross-domain

我试图解决一个复杂的解决方案。

我在服务器1上托管了一个wcf服务(.net 4.0)。服务器1符合PCI标准。

服务器2是客户端网站。本网站托管了信用卡表格。它还有一个jquery插件,可以劫持表单帖子。服务器2不符合PCI标准。

信用卡表单中的数据无法发布到服务器2。

所以,我试图从我的jquery插件中调用我的wcf服务(json in,json out)。我不能在服务器2上使用代理,因为这意味着我的帖子数据会转到该服务器。

因此,表单数据必须从客户端计算机直接转到服务器1,同时完全绕过server2。

我在服务器1上看到了几篇关于使用crossdomain.xml文件的帖子,但是我仍然收到错误:

  

XMLHttpRequest无法加载   http://server1/MySite.Services/PaymentService.svc/SubmitCreditCardPayment。   原点http://server2不是   允许的   访问控制允许来源。

有没有办法用json in和json out对WFC服务进行跨域ajax调用?

我不一定要使用jquery ajax来执行此操作。如果您有另一个使用jquery发送数据跨域的解决方案,我很乐意听到它。

编辑:

澄清一下,这是我的服务的样子。

PaymentResponse SubmitCreditCardPayment(CreditCardRequest request);

请求和响应对象只是具有属性的类(DataContract / DataMember)。

1 个答案:

答案 0 :(得分:0)

您是否尝试过JSONP

这是一种通过使用对源目标没有限制的脚本标记从客户端调用server1上的服务的简单方法。要在js env中解释json响应,需要回调(比如foo(data)),并且需要在ajax查询中将此回调名称设置为GET参数。目标ajax服务将通过调用foo来附上他的json响应; foo({json: things})

修改 回应你的评论;:你已经测试了JSON-P,但它没有安全保障(并使用GET):

你是对的JSON-P对安全性不是很好。但 CORS 会减少您的应用程序允许的浏览器数量(仅限最近的浏览器)。您遇到的错误消息是CORS错误消息。如果您在js中提出请求,那么您在执行CORS时遇到问题,旧浏览器需要JSON-P后备。

因此,即使使用jQuery magic ajax函数,您也会遇到使用错误的securized json-p或支持错误的CORS的问题。

另一个解决方案是将server2作为server1的子域,但对于信用卡付款,我认为不是你的情况。

crossdomain.xml 文件仅适用于 Flash 应用程序,而不是js,但您可以使用它来在flash(gasp)中创建整个ajax进程,从而减少允许再次使用您的应用程序的人数,但基于(最近)闪存支持。我正在谈论闪存是一个真正的解决方案......