2011-01-20 62 views
1

我有一個複雜的解決方案,我試圖解決。jquery跨域post到wcf服務沒有代理

我有託管服務器上的WCF服務(.NET 4.0)1.服務器1 PCI兼容。

服務器2是客戶端網站。這個網站有一個信用卡表格。它也有一個jquery插件,劫持表單發佈。服務器2不符合PCI標準。

在信用卡形式的數據無法發佈到服務器2

所以,我想從我的jQuery插件調用我的WCF服務(JSON中,JSON出)。我無法在服務器2上使用代理服務器,因爲這意味着我的發佈數據會發送到該服務器。

因此,表單數據必須在完全繞開服務器2從客戶機直接轉到服務器1。

我看到了有關使用服務器1 crossdomain.xml文件的幾個職位,但我仍然得到一個錯誤:

XMLHttpRequest cannot load http://server1/MySite.Services/PaymentService.svc/SubmitCreditCardPayment . Origin http://server2 is not allowed by Access-Control-Allow-Origin.

有沒有辦法做一個跨域AJAX調用到WFC服務, json和json出來了嗎?

我不想使用jquery ajax來做到這一點。如果您有另一個使用jquery發送數據跨域的解決方案,我很樂意聽到它。

編輯:

澄清,這是我的服務的樣子。

PaymentResponse SubmitCreditCardPayment(CreditCardRequest request); 

的請求和響應對象只是類與性質(DataContract/DataMember)。

回答

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魔術AJAX功能,你將不得不使用任何壞securized JSON-P或壞的支持CORS的問題。其他

一種解決方案是有服務器2作爲服務器1的子域,但使用信用卡付款我認爲這不是你的情況。

的crossdomain.xml文件只存在於閃存應用程序,而不是JS,但你可以用它來使閃光燈(GASP)整個AJAX過程,減少的人數,纔可再次使用你的應用,但基於(最近)的閃存支持。 OMG我正在談論閃存作爲一個真正的解決方案...

+0

是的,我有。 jsonp只適用於獲取請求,這意味着我必須通過查詢字符串傳遞信用卡信息。這並不理想,因爲Web服務器會記錄那些違反PCI的數據。 – Josh 2011-01-20 19:49:25