2012-02-06 81 views
1

我想发送参数给我的Web服务,它提供了XML和JSON,这取决于头中的请求类型。但是,当我传递JSON参数时,服务器会以状态码回应我。发送Json字符串到.asmx Web服务导致HTTP 500

下面是我在我的web服务调用方法:

[WebMethod] 
public string EchoEmployee(Employee emp) 
{ 
    return "you sent employee " + emp.Name; 
} 

* Employee是一个测试类,它包含了两个字符串和int领域

的JSON字符串,我传递在Web服务方法:

{"emp":[{"Name":"Waqas Aslam","Company":"Dell"}]} 

如果我看着我的方法的XML结构,这是怎么解释道:

<EchoEmployee xmlns="TestIntegrationLayer"> 
     <emp> 
     <Id>int</Id> 
     <Name>string</Name> 
     <Company>string</Company> 
     <Address>string</Address> 
     <Phone>string</Phone> 
     <Country>string</Country> 
     <DOB>dateTime</DOB> 
     </emp> 
</EchoEmployee> 

我知道我只在我的JSON字符串中设置了两个键,但这有什么关系吗?我是否需要定义所有的密钥?我的JSON字符串还有什么可能是错的?

+1

为什么你的json中的emp是一个数组? – Selvin 2012-02-06 14:47:46

+0

是的,我意识到它,并删除'[]',它的工作!谢谢 – waqaslam 2012-02-06 15:16:47

回答

0

我有同样的问题。添加以下到我的web.config:

<system.webServer> 
    <handlers> 
     <add name="ScriptHandlerFactory" verb="*" path="*.asmx" 
      preCondition="integratedMode" 
      type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" /> 
    </handlers> 
</system.webServer> 

另外,还要确保你的服务是ScriptService由装饰类是这样的:

[ScriptService] 
public class SomeService : BaseWebService 
{ 
} 

我不得不删除WebService的装饰。