WebService
前言
自我感觉WebService没有太多东西,就简单记录一下。
建立
新建一个为空的Web项目,添加一个Web服务,会自动生成一个asmx文件,右键该文件,选择“设置为起始页”,双击该文件。
/// <summary> /// WebService1 的摘要说明 /// </summary> [WebService(Namespace = "http://tempuri.org/")] [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)] [System.ComponentModel.ToolboxItem(false)] // 若要允许使用 ASP.NET AJAX 从脚本中调用此 Web 服务,请取消注释以下行。 // [System.Web.Script.Services.ScriptService] public class WebService1 : System.Web.Services.WebService { [WebMethod] public string HelloWorld() { return "Hello World"; } }
F5运行,会启动默认浏览器,会打开一个网页,里面有一个连接“HelloWorld”,这个就是HelloWorld的方法,点击进入另一个界面,显示“HelloWorld”,下面有一个“调用”按钮,点击出显示一个XML格式的内容,这是返回string类型。
1 <string>Hello World</string>
新建方法
如何返回的是实体,会是什么样子,先新建一个Company类,简单定义Id,CompanyName和CompanyAddress属性。
1 /// <summary> 2 /// 公司 3 /// </summary> 4 public class Company 5 { 6 /// <summary> 7 /// Id 8 /// </summary> 9 public int Id { get; set; } 10 11 /// <summary> 12 /// 名称 13 /// </summary> 14 public string CompanyName { get; set; } 15 16 /// <summary> 17 /// 地址 18 /// </summary> 19 public string CompAddress { get; set; } 20 }
重新定义一个GetCompanyList方法,[]里面WebMethod,定义该方法是Web方法,()里面Description是对该方法的一个描述,在网页的Web方法先马会有一段说明,及为该内容。
1 /// <summary> 2 /// 得到公司信息 3 /// </summary> 4 /// <returns></returns> 5 [WebMethod(Description = "得到公司信息")] 6 public List<Company> GetCompanyList() 7 { 8 List<Company> compList = new List<Company>(); 9 compList.Add(new Company { Id = 1, CompanyName = "First", CompAddress = "北京" }); 10 compList.Add(new Company { Id = 2, CompanyName = "Second", CompAddress = "天津" }); 11 compList.Add(new Company { Id = 3, CompanyName = "Third", CompAddress = "河北" }); 12 return compList; 13 }
这样会传输什么呢,还是XML格式
1 <ArrayOfCompany><Company><Id>1</Id><CompanyName>First</CompanyName><CompAddress>北京</CompAddress></Company><Company><Id>2</Id><CompanyName>Second</CompanyName><CompAddress>天津</CompAddress></Company><Company><Id>3</Id><CompanyName>Third</CompanyName><CompAddress>河北</CompAddress></Company></ArrayOfCompany>
乍看,好像挺好的,没什么问题,但是如果成千上万条大的数据会如何,XML会很大,传输的string也会很大,难道就没有好的方法?Json出现了,Json把一些属性名缩减为一个简短的代号,来传输,这样就减少了很多,Json在这就不多说了,有时间再专门写它。
最后就是发布,配置。在项目中右键“添加服务引用(S)”,填写配置的地址,“转到”可以查看链接状态,命名为“TestService”,然后确定,成功添加该服务。
代码中
1 TestService.WebService1 testService = new TestService.WebService1(); 2 testService.GetCompanyListAsync(); 3 testService.GetCompanyListCompleted += (x,y) => 4 { 5 //访问webservice错误 6 if(y.Error != null) 7 { 8 } 9 else 10 { 11 //出错 12 if (y.Result == null) 13 { 14 } 15 else 16 { 17 List<Company> CompanyList = new List<Company>(); 18 TestService.Company[] companyArray = y.Result; 19 foreach (var tempComp in companyArray) 20 { 21 Public.PublicBase.CompanyList.Add(new Company { Id = tempComp.Id, CompanyName = tempComp.CompanyName, CompanyAddress = tempComp.CompAddress }); 22 } 23 24 } 25 } 26 27 };
就可以取到具体的数据~