WCF分布式开发必备知识(3):Web Service 使用

时间:2022-10-10 16:35:08

参考地址:http://www.cnblogs.com/zhili/p/WebService.html

一、WebService概述

SOAP、WSDL、UDDI
SOAP(Simple Object Access Protocal,简单对象访问协议),是在分散或在分布式环境中交换信息的简单协议。
WSDL(Web Services Description Language,Web服务描述语言) 对WebService 的解释说明文档,描述Web服务发布的XML格式
UDDI 统一描述、发现和集成(Universal Description, Discovery, and Integration)的缩写,是Web服务的黄页,它是一个基于XML的跨平台的描述规范,可以使世界范围内的企业在互联网上发布自己所提供的服务供其他客户查询使用。
趣味理解:
Web Service 好比是一个服务供应商;
SOAP 就像是两个公司之间签的合同,约束双方按照一定的规范和标准做事;
WSDL就像说明书,告诉别人你有什么,能给别人提供什么服务;
UDDI好比你的公司需要在黄页或工商注册,方便别人查询

二、WebService执行过程

WCF分布式开发必备知识(3):Web Service 使用

  • 在客户端上,创建了一个Web Services代理类的实例。该对象驻留在客户端机器上。
  • 客户端调用代理类上的方法
  • 客户端机器将Web Services方法的参数序列化为SOAP消息,然后通过传送协议发送给Web Services。
  • Web Services底层结构接收SOAP消息并进行反序列化。它会创建Web Services的类的实例,同时调用对应的Web Services方法。
  • Web Services方法执行,并返回结果。
  • Web Services底层结构会将返回结果序列化为SOAP消息,然后通过网络发送回客户端。
  • 客户端将接收SOAP消息,然后将XML反序列为返回值或任何输出参数,并将它们传递给代理类的实例。
  • 客户端接收返回值和所有输出参数。

三、WebService的优缺点

优点:

1.跨平台:Web Services完全基于XML(可扩展标记语言)、XSD(XMLSchema)等与平台无关的行业标准。

2.自描述:Web Service使用WSDL进行自我描述,包括服务的方法、参数、类型和返回值等相关信息。

3.跨防火墙:Web Service使用http协议进行通信,可以穿越防火墙。

缺点:

1.效率低下,不适合做单应用系统的开发。

2.安全问题:Web Services没有自身的安全机制,必须借助Http协议或IIS等宿主程序实现信息安全加密。

四、使用参数介绍

Web Service(Web 服务)提供以下属性。

Namespace:默认是"http://tempuri.org/",此属性的值包含 XML Web Service 的默认命名空间。XML 命名空间提供了一种在 XML 文档中创建名称的方法,该名称可由统一资源标识符(URI)标识。使用XML命名空间,可以唯一标识XML文档中的元素或属性因而,在 XML Web Service 的服务说明中,Namespace 被用做与 XML Web Service 直接相关的XML 元素的默认命名空间。如果不指定命名空间,则使用默认命名空间http://tempuri.org/。

Name:此属性的值包含 XML Web Service 的名称。在默认情况下,该值是实现 XML Web Service 的类的名称。

Description:此属性的值包含描述性消息,此消息将在 XML Web Service 的说明文件(例如服务说明和服务帮助页)生成后显示给 XML Web Service 的潜在用户。

WebMethod(Web 服务方法)有以下 6 个属性。

Description:是对 Web Service 方法的描述信息。就像 Web Service 方法的功能注释,可以让调用者看见的注释。

EnableSession:指示 Web Service 是否启动 Session 标志,主要通过 Cookie 完成,默认为 false。

MessageName:主要实现方法重载后的重命名:

TransactionOption:指示 Web Service 方法的事务支持。

CacheDuration:设置响应应在缓存中保留的秒数。这样 Web Service 就不需要重复执行多遍,可以提高访问效率,而 CacheDuration 就是指定缓存时间的属性。

五、代码

TestWebService1.asmx文件

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Services;
using System.Web.Services.Protocols; namespace WebService
{
/// <summary>
/// TestWebService1 的摘要说明
/// </summary>
[WebService(Namespace = "http://www.anniya.com/api")]//
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
[System.ComponentModel.ToolboxItem(false)]
// 若要允许使用 ASP.NET AJAX 从脚本中调用此 Web 服务,请取消注释以下行。
[System.Web.Script.Services.ScriptService]
public class TestWebService1 : System.Web.Services.WebService
{
[WebMethod]
[SoapHeader("myHeader")]
public string HelloWorld(string name)
{
if (!myHeader.IsValid())
{
return "对不起,您没有权限访问";
}
return name + ",Hello World";
} public MySoapHeader myHeader = new MySoapHeader();
[WebMethod]
public List<Student> GetStudent()
{ return new List<Student>()
{
new Student() {Id = , Name = "张三1"},
new Student() {Id = , Name = "张三2"},
new Student() {Id = , Name = "张三3"}
};
} [WebMethod(Description="根据学生列表进行处理")]
public List<Student> GetStudentResultByStudentList(List<Student> student)
{
foreach (var stu in student)
{
stu.Name += ",已经处理过了";
}
return student;
} } public class Student
{
public int Id { get; set; }
public string Name { get; set; }
} public class MySoapHeader : SoapHeader
{
public string UserName { get; set; }
public string Password { get; set; } public bool IsValid()
{
if (UserName == "admin" && Password == "")
{
return true;
}
else
{
return false;
}
} } }

调用代码:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using WebApplicationTestWebService.ServiceReference1; namespace WebApplicationTestWebService
{
public partial class WebForm1 : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
using (TestWebService1SoapClient client = new TestWebService1SoapClient())
{
MySoapHeader myHeader = new MySoapHeader();
myHeader.UserName = "admin";
myHeader.Password = "";//用户名和密码要和调用的Web Service 一致
Response.Write(client.HelloWorld(myHeader, "yxl") + "</br>");
Response.Write("<hr/>");
Student[] students = client.GetStudent();
foreach (var student in students)
{
Response.Write(student.Name+"</br>");
}
Response.Write("<hr/>"); foreach (var student in client.GetStudentResultByStudentList(students))
{
Response.Write(student.Name + "</br>");
}
} }
}
}

如果使用ajax调用并且跨域的话,可以在本地应用程序中调用webservice,然后在用js调用本地应用程序,这样就不会跨域了

安全除了使用SoapHeader,还可以使用SSL,配置SSL网站,还可以控制访问的IP地址,但是ip地址的维护不方便,不推荐使用

WCF分布式开发必备知识(3):Web Service 使用的更多相关文章

  1. WCF分布式开发必备知识&lpar;2&rpar;:&period;Net Remoting

    .Net Remoting技术,我们可以将其看作是一种分布式处理方式.作为应用程序之间通信的一种机制,.Net Remoting与MSMQ消息队列不同,它不支持离线脱机消息,另外只适合.Net平台间程 ...

  2. WCF分布式开发必备知识(1):MSMQ消息队列

    本章我们来了解下MSMQ的基本概念和开发过程.MSMQ全称MicroSoft Message Queue,微软消息队列,是在多个不同应用之间实现相互通信的一种异步传输模式,相互通信的应用可以分布于同一 ...

  3. WCF分布式开发步步为赢&lpar;7&rpar;&colon;WCF数据契约与序列化

    本节继续学习WCF分布式开发步步为赢(7):WCF数据契约与序列化.数据契约是WCF应用程序开发中一个重要的概念,毫无疑问实现客户端与服务端数据契约的传递中序列化是非常重要的步骤.那么序列化是什么?为 ...

  4. WCF分布式开发步步为赢&lpar;1&rpar;:WCF分布式框架基础概念

    众所周知,系统间的低耦合一直是大型企业应用系统集成追寻的目标,SOA面向服务架构的出现为我们的如何利用现有企业系统资源进行企业ERP系统设计和实现提供了重要的参考原则.SOA如此炙手可热,各大厂商都推 ...

  5. WCF分布式开发步步为赢&lpar;9&rpar;&colon;WCF服务实例激活类型编程与开发

    .Net Remoting的激活方式也有三种:SingleTon模式.SingleCall模式.客户端激活方式,WCF服务实例激活类型包括三种方式:单调服务(Call Service),会话服务(Se ...

  6. WCF分布式开发步步为赢&lpar;13&rpar;&colon;WCF服务离线操作与消息队列MSMQ

    之前曾经写过一个关于MSMQ消息队列的文章:WCF分布式开发必备知识(1):MSMQ消息队列 ,当时的目的也是用它来作为学习WCF 消息队列MSMQ编程的基础文章.在那篇文章里,我们详细介绍了MSMQ ...

  7. WCF分布式开发步步为赢&lpar;12&rpar;&colon;WCF事务机制(Transaction)和分布式事务编程

    今天我们继续学习WCF分布式开发步步为赢系列的12节:WCF事务机制(Transaction)和分布式事务编程.众所周知,应用系统开发过程中,事务是一个重要的概念.它是保证数据与服务可靠性的重要机制. ...

  8. java web开发必备知识

    从各种招聘网站的要求上筛选出了一些java开发的一些基本的要求,对照自身看看有哪些缺陷. java基础 既然是java web开发,java SE肯定要学好了. 多线程,IO,集合等,对队列,缓存,消 ...

  9. 移动web开发(一)——移动web开发必备知识

    参考: 移动终端开发必备知识.http://isux.tencent.com/mobile-development-essential-knowledge.html

随机推荐

  1. noj&lbrack;1581&rsqb; 筷子

    题目描述 A先生有很多双筷子.确切的说应该是很多根,因为筷子的长度不一,很难判断出哪两根是一双的.这天,A先生家里来了K个客人,A先生留下他们吃晚饭.加上A先生,A夫人和他们的孩子小A,共K+3个人. ...

  2. AngularJS学习--- 事件处理&lpar;Event Handlers&rpar; ng-click操作 step 10

    本文主要通过介绍ng-click方法来对angularjs中的事件处理方法做个了解. 1.切换目录 git checkout step- npm start 2.效果 点击右边的小图片,那么左边框中将 ...

  3. C&num;生成不重复的随机数&lpar;转&rpar;

    我们在做能自动生成试卷的考试系统时,常常需要随机生成一组不重复随机数的题目,在.net Framework中提供了一个专门用来产生随机数的类System.Random. 对于随机数,大家都知道,计算机 ...

  4. 利用FluorineFx的ByteArray上传图片

    Flex端利用new PNGEncoder().encode(bitmapData)将png图片转换为ByteArray,然后传给服务器,服务端需要定义一个public ByteArray Uploa ...

  5. js正则验证方法大全

    1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 3 ...

  6. systemd添加自定义系统服务设置自定义开机启动

    1.服务权限 systemd有系统和用户区分:系统(/user/lib/systemd/system/).用户(/etc/lib/systemd/user/).一般系统管理员手工创建的单元文件建议存放 ...

  7. &lt&semi;Programming Collective Intelligence&gt&semi; Chapter2:Making Recommendations

    <Programming Collective Intelligence> Chapter2:Making Recommendations 欧几里得距离评价 皮尔逊相关度评价 它相比于欧几 ...

  8. JAVA 综合面试题

    JAVA 综合面试题 2007-08-12 目录 TOC \o "1-3" \h \z \u Java面试题整理 9 Java面向对象 9 1. super()与this()的区别 ...

  9. win10 教育版本变专业版本

    输入win10升级产品密匙:VK7JG-NPHTM-C97JM-9MPGT-3V66T.系统自动验证后依次点击下一步.始按钮kms激活

  10. 【LeetCode】3&period; Longest Substring Without Repeating Characters &lpar;2 solutions&rpar;

    Longest Substring Without Repeating Characters Given a string, find the length of the longest substr ...