2014-02-12 32 views
0

我正在使用ASP.NET 4.0,並且需要在頁面上的javascript內返回一個SOAP(XML)響應到一個JSON變量。比我想能夠調用變量和它的屬性,就像你使用任何JSON變量一樣。 SOAP Web服務(.asmx)文件不在需要構建客戶端的服務器上(接收請求並將其放入JSON變量中)。此外,爲了使這更復雜,發送到Web服務的XML請求需要發送用戶名和密碼以能夠返回項目。如何從SOAP響應創建JSON變量?

用於Web服務的URL是在這裏:http://ws.idssasp.com/members.asmx?wsdl

想我會創建一個Visual Studio的Web應用程序項目(C#),這是我能夠但是做,連接到Web服務就好了,這需要位於JavaScript用於輸出來自Web服務方法的項目的頁面上。因此,在這種情況下.aspx文件不起作用,因爲它只需要在標籤內的JSON變量中輸出Web服務響應的結果(可能位於頁面的頭部,但對我無關緊要哪裏)。或者它可以動態地創建一個.JS文件(這可能會更好,因爲它會被緩存,如果我的服務器上存在js文件,則不需要多次調用Web服務)。但是,我不確定要在Visual Studio中構建什麼來完成此任務?我不確定如何將它用於輸出到頁面上。我想JSON變量也可以存儲在服務器上的Members.json文件中,並且可以調用它來加載所需的json。

如何從SOAP,XML,Response ...中向SOAP Server請求頭中的UserName和Password發送請求後返回JSON數組。這裏有一個頁面解釋了請求所需的XML以及響應的樣子:http://ws.idssasp.com/members.asmx?op=GetMemberList&pn=0

在這個頁面上,他們告訴你如何通過PHP來完成它,但是PHP不可用,只有ASP.NET 4.0提供給我。這裏是做他們的PHP方式:

$clientWS = new SoapClient('http://ws.idssasp.com/Members.asmx?wsdl'); 
$namespaceWS = 'http://ws.idssasp.com/Members.asmx'; 

$dmsClientU = ''; 
$dmsClientP = ''; 

$headerBodyWS = array('UserName' => $dmsClientU, 'Password' => $dmsClientP); 
$headerWS = new SOAPHeader($namespaceWS, 'AuthorizeHeader', $headerBodyWS, false); 
$clientWS->__setSoapHeaders(array($headerWS)); 

$results = $clientWS->GetMemberList(); 

print_r($results); 

我怎麼可以在這裏做同樣的事情在ASP.NET 4.0,而不是返回XML結果,返回被內使用JSON變量腳本標記在頁面上?

或者我正在反思這個,有更好的解決方案?

回答

1

如果您連接到Web服務並檢索對象時沒有問題,則應該能夠從SOAP響應的屬性中構建JSON對象。

我建議在ASP.NET中創建一個Web服務,將SOAP響應轉換爲C#服務器代碼中的JSON,然後在頁面的JavaScript中使用AJAX從Web服務中檢索JSON。基本上,您將爲您的項目創建專門的轉換Web服務,它位於中間。

保留服務器端爲您的.asmx轉換服務所需的憑據。不管你做什麼,即使它可以避免編寫服務器端代碼,也不要將憑證放在客戶端JavaScript中用於Web服務調用。

有關ASP.NET Web服務的一些參考:

http://msdn.microsoft.com/en-us/library/bb398998%28v=vs.100%29.ASPX

http://msdn.microsoft.com/en-us/library/bb763183%28v=vs.100%29.ASPX

+0

非常感謝你,這有很大幫助!認爲憑證將進入其他Web服務。但是在另一個Web服務中想到一個WebService會讓人感到困惑......需要考慮一下我需要在網站根目錄下的web.config文件中放一些東西...... –

+0

另外,怎麼做你把SOAP轉換成JSON?我還沒有看到這方面的任何好例子,但也許他們確實存在... –

+0

不要將新的Web服務看作另一個Web服務的* inside * - 它只是從您引用的外部服務中消耗XML並將其轉換爲JSON以供您的頁面JavaScript使用。由於您的項目正在引用WSDL,因此SOAP響應應該作爲普通的C#對象返回。在你的服務的web方法中,返回的C#對象只需要被序列化成JSON,這可以通過構建一個JSON字符串來手動完成,但最好使用像JSON.NET這樣的工具:http://james.newtonking.com/ JSON – polyslush