2010-11-11 77 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

相关问题