欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

c# JSON返回格式的WEB SERVICE

程序员文章站 2023-11-22 11:05:40
我贴c#的代码: 复制代码 代码如下:namespace iwebs.webs{ using system; using system.web.services; usin...
我贴c#的代码:
复制代码 代码如下:

namespace iwebs.webs{
using system;
using system.web.services;
using system.web.services.protocols;
using system.xml;
using system.xml.xpath;
using system.web.script.services;
using iwebs;
[webservice (name="cjjer",description="一个返回用户资料,订单信息的webservice,请求的手机号码最长12位",namespace="http://www.cjjer.com/webs/")]
[system.web.script.services.scriptservice]
public class cjjer:webservice{
public class reqheader : soapheader{
public string username;
public string password;
}
public reqheader header;
[webmethod (description ="输入单个用户的int值id,返回用户类",messagename="getuser",enablesession = false)]
[scriptmethod(responseformat = responseformat.json)]
[soapheader("header", direction = soapheaderdirection.in)]
public model.member getuser(int uid){
this.chechheader(header);
return (new dal.members()).getbyid(uid);
}
[webmethod (description ="输入某个用户的手机号码,返回用户类",messagename="getuserbymobile",enablesession = false)]
[scriptmethod(responseformat=responseformat.json)]
[soapheader("header", direction = soapheaderdirection.in)]
public model.member getuserbymobile(string umobile){
this.chechheader(header);
return (new dal.members()).getbymobile(umobile);
}
[webmethod (description ="输入某个用户的手机号码,返回订单数组",messagename="getordersbymobile",enablesession = false)]
[scriptmethod(responseformat=responseformat.json)]
[soapheader("header", direction = soapheaderdirection.in)]
public iwebs.model.order[] getordersbymobile(string umobile){
this.chechheader(header);
return (new dal.orders()).getbymobile(umobile,-365);
}
[webmethod (description ="输入某个用户的id,返回订单数组",messagename="getordersbyuserid",enablesession = false)]
[scriptmethod(responseformat=responseformat.json)]
[soapheader("header", direction = soapheaderdirection.in)]
public iwebs.model.order[] getordersbyuserid(int uid){
this.chechheader(header);
return (new dal.orders()).getordersbyuserid(uid,-365);
}
private void chechheader(reqheader header){
if (header != null){
if (header.mustunderstand)
{
string username = header.username;
string password = header.password;
if (username == "cjjer" && password == "000000")
{
return ;
}
else
{
throw new applicationexception (string.format("用户名[{0}]或密码[{1}]错误",username,password));
}
}
else
{
throw new applicationexception ("包含用户名和密码信息的消息头格式不正确");
}
}
else
{
throw new applicationexception ("请提交包含用户名和密码信息的消息头");
}
}
};
}

注意的是,这个请求必须要请求提交soapheader,其中的[system.web.script.services.scriptservice]
这句是利用ajax.net处理json请求的,如果不需要就免了,如果需要的话下载ajax.net,然后在bin里面放system.web.extensions.design.dll,system.web.extensions.dll,按照ajax.net默认的那个web.config修改你的web.config,在浏览器中查看*.asmx文件,如果使用?wsdl可以看到xml的wsdl的话第一步算成功了。
其中注意的是:
web.config
在httphandler中有两个节点很重要:
复制代码 代码如下:

<remove verb="*" path="*.asmx"/>
<add verb="*" path="*.asmx" validate="false" type="system.web.script.services.scripthandlerfactory, system.web.extensions, version=3.5.0.0, culture=neutral, publickeytoken=31bf3856ad364e35"/>

这两句声明让scripthandlerfactory处理webservice请求。
利用ajax请求的时候 http_request.setrequestheader("content-type", "application/json");
加上这句默认的返回的就是json。
附上web.config和相关的dll文件吧:

在c#代码创建的时候道理一样。