我试图解决一个复杂的解决方案。
我在服务器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
)。
答案 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进程,从而减少允许再次使用您的应用程序的人数,但基于(最近)闪存支持。我正在谈论闪存是一个真正的解决方案......