2010-11-11 76 views
0

我有一個ASP.NET Web應用程序。ASP.NET - Web方法的響應可以是SOAP(XML)和JSON嗎?

它有一個網絡服務,有幾種網絡方法。

所有這些Web方法都基於默認設置。例如:

using System.Web.Services; 

namespace WebApplication2 
{ 
    [WebService(Namespace = "http://mydomain.org/")] 
    [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)] 
    [System.ComponentModel.ToolboxItem(false)] 
    public class WebService1 : WebService 
    { 
     [WebMethod] 
     public string HelloWorld() 
     { 
      return "Hello World"; 
     } 

     [WebMethod] 
     public Person GetPersonById(int id) 
     { 
      Person result = new Person(); 
      // code... 
      return person; 
     } 
    } 
} 

響應採用SOAP(XML)格式。

我的問題:我可以根據輸入參數或標題將響應的格式更改爲JSON嗎?

+0

您是在問_how_這樣做,還是您應該這樣做? – Oded 2010-11-11 20:15:44

+0

@Oded - 我問是否技術上可行,如果是這樣 - 如何完成。 「應該」部分不在此問題的範圍內,因爲在生產環境中對此服務有一些限制。 – 2010-11-11 21:07:33

+0

Ron如果有任何答案是答案,請將其標記爲答案 – 2010-11-14 17:08:09

回答

0

一個ASMX Web服務的響應類型是通過在各個網絡方法ResponseFormat屬性指定。

E.g:

[WebMethod] 
[ScriptMethod(ResponseFormat = ResponseFormat.Xml)] 
public Person GetPersonById(int id) 

[WebMethod] 
[ScriptMethod(ResponseFormat = ResponseFormat.Json)] 
public Person GetPersonById(int id) 

所以,據我所知,答案是沒有- 你不能同時返回(從一個方法)。

我確信有一些黑客可以做,但這是推薦的方法。

如果你想開始返回這兩種類型,你應該轉向更RESTful的方法,無論是WCF REST,OData或ASP.NET MVC。

在這些技術中,被叫可以指定響應類型,他們希望:

GET:http://api.yourdomain.com/person/1?format=json

GET:http://api.yourdomain.com/person/1?format=xml

注意兩個呼叫是如何一個物理資源。

請注意,出於安全原因,「Goo」here提及您的JSON Web服務調用應爲HTTP POST

0

您應該簽出Windows Communication Foundation(WCF)。使用它你可以定義一個服務的幾個端點。例如,這些端點中的每一個都可以以不同的格式返回數據。

REST/SOAP endpoints for a WCF service

+0

感謝您的參考,我會盡力實施它。 – 2010-11-11 21:43:29

0

技術上是可以的,你只需發送回JSON和設定的迴應,以「應用/ JSON」的內容類型。

+0

此技術是否也適用於非字符串返回類型? (請參閱第二種方法) – 2010-11-12 04:44:31

+0

當您將JSON從服務器返回給客戶端時,它始終採用字符串形式。我的意思是JSON是Javascript對象的字符串表示,也就是說它不是二進制的。然而,簡短的答案是否定的,因爲大多數情況下,SOAP是基於「字符串」的,在你的情況下,你的Person對象被序列化爲一個字符串,這就是它被序列化爲一個JSON字符串的問題。我使用WebServices已經有一段時間了,但是在HttpHandler中,例如,如果我想發回一個Person對象的JSON,可以使用DataContractJsonSerializer類來完成這項工作。 – 2010-11-12 05:29:38

+0

請注意,SOAP/XML和JSON在很多方面都是競爭性概念。因此,在您的基礎上,因爲您使用的是WebServices,所以您無法選擇發回JSON。 – 2010-11-12 05:30:47

相關問題