vs2012.net WebService简单的创建、使用、验证、发布后更改引用地址、web reference、service reference

工作中使用到较多的webservice,学习了一段时间,在这里总结一下在vs中使用webservice的过程和理解。

一 创建(服务器端)

 
在vs中穿件webservice是比较简单的。下面记录一下步骤。

步骤1:新建一个web项目,注意不能是类库。

步骤2:在新建的web项目上,添加新项--web服务;

自动生成的代码如下:

 /// <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";
        }
    }

步骤3:  编写webservice服务代码;

步骤4:发布一下编写好的代码,运行后的地址就是当前webservice的地址咯;

Over!

二 调用(客户端)

直接上过程:

步骤1:在要添加webservice的项目上,右键引用--添加服务引用;

步骤2:注意这里有两种方式来添加webservice引用,一种是web reference(web引用),另一种叫:service reference(服务引用);
在添加的时候注意一下添加的是哪个,这个不大好描述;直接上图咯。下图表示服务引用↓(命名空间请自定义,就是代理类的命名空间):

如果点击上图的"高级"按钮,那么将会添加web引用↓(ps:根据下图的说明,web reference是net2.0版本的的引用方式,为了兼容性才保留下来;):

步骤3:添加完引用,并设置自定义的命名空间后,vs2012会使用工具自动根据URL去读取wsdl文件,然后生成代理类,你就可以用代理类实例化对象,然后接续工作咯····

Over!

三  验证调用者身份(webservice的登录)

使用webservice的验证规则大体有这么几种:验证调用者Ip地址、利用soap头验证调用者的帐号密码、利用ssl加密验证;这里要说的是利用soap header进行验证的方法。

步骤一:在webservice服务中添加一个类(这个类作为传递soap头帐号密码的载体;继承自抽象类:System.Web.Services.Protocols.SoapHeader)。代码如下

namespace PointStoreWebService
{
    /// <summary>
    /// 这个代码网上一大片,可以根据需要自己修改
    /// </summary>
    public class MySoapHeader:System.Web.Services.Protocols.SoapHeader
    {
        /// <summary>
        /// 属性咯;
        /// Tips:不想用自动属性,有可以快捷生成属性的方法:限定下环线开头的私有成员,然后Ctrl+R+E,vs2012会自动构造出属性咯
        /// </summary>
        private string _UserId = string.Empty;
        public string UserId
        {
            get { return _UserId; }
            set { _UserId = value; }
        }
        private string _PassWord = string.Empty;
        public string PassWord
        {
            get { return _PassWord; }
            set { _PassWord = value; }
        }
        /// <summary>
        /// 无参构造咯
        /// </summary>
        public MySoapHeader()
        {

        }
        /// <summary>
        /// 有参构造构造咯
        /// </summary>
        /// <param name="id"></param>
        /// <param name="pwd"></param>
        public MySoapHeader(string id, string pwd)
        {
            Initial(id, pwd);
        }
        /// <summary>
        /// 初始化咯
        /// </summary>
        /// <param name="id"></param>
        /// <param name="pwd"></param>
        public void Initial(string id, string pwd)
        {
            UserId = id;
            PassWord = pwd;
        }
        /// <summary>
        /// 验证咯
        /// </summary>
        /// <param name="id"></param>
        /// <param name="pwd"></param>
        /// <param name="msg"></param>
        /// <returns></returns>
        public bool IsValid(string id, string pwd,out string msg)
        {
            msg = "";
             if (id == "admin" && pwd == "admin")
            {
                return true;
            }
            else
            {
                msg = "log error!";
                return false;
            }
        }
        /// <summary>
        /// 重载咯
        /// </summary>
        /// <param name="msg"></param>
        /// <returns></returns>
        public bool IsValid(out string msg)
        {
            return IsValid(_UserId, _PassWord, out msg);
        }
    }
}

步骤二:在webservice服务类中添加上面类型的成员;

  public   MySoapHeader header = new MySoapHeader(); 

步骤三:在需要进行验证的方法上添加属性:(这一步不要忘记,否则在调用的时候是 点 不出来MySoapHeader类的) 
[SoapHeader("header")]

步骤四:在需要验证的方法中调用MySoapHeader类中的方法进行流程控制咯。。。。

步骤五:在调用端(译并更新引用
(/ □ \)记得编),先实例化MySoapHeader类的一个对象,然后给对象的验证属性(这里就是UserId、PassWord进行赋值;)

步骤六:在使用代理类对象的方法的时候将 MySoapHeader类对象传递过去;

ps:这里需要注意的是:根据vs2012添加webservice方式的不同,传递soap头的方法也不一样;具体如下:

①当你是web reference方式时:在实例化代理类后(假设名为:ServiceOBJ),可以使用ServiceOBJ.MySoapHeaderValue=soap头对象名;

②当你是Service
reference方式时:代理类对象是无法找到MySoapHeaderValue这个属性的。在需要验证的方法上,作为参数传递soap头对象:ServiceOBJ.MethodName(soap头对象)

当这个方法本来就有参数的时候,那么这个方法就自动多了个参数,且在第0个参数的位置;

Ove!!!

四 在软件发布后,动态的修改引用地址的配置方法

注意这里我使用的是新版本的service 引用方式;

当你添加一个service reference后,会在对应的项目下生成一个app.config文件:(如下)

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
    <configSections>
    </configSections>
    <system.serviceModel>
        <bindings>
            <basicHttpBinding>
                <binding name="PointStoreServiceSoap" />
            </basicHttpBinding>
        </bindings>
        <client>
            <endpoint address="http://localhost:25548/PointStoreService.asmx"
                binding="basicHttpBinding" bindingConfiguration="PointStoreServiceSoap"
                contract="PointStoreService.PointStoreServiceSoap" name="PointStoreServiceSoap" />
        </client>
    </system.serviceModel>
</configuration>

其中需要注意的是:

①basicHttpBinding节点下的<binding >,每天加一个service reference后,会生成一个binding节点。

②client节点下的endpoint,每添加service reference,也会增加一个endpoint节点。

如果添加webservice引用的项目是一个类库,那么就需要在网站的web.config下添加响应的模块来供类库读取。即在web.config配置文件中添加如下部分:

<system.serviceModel>
    <bindings>
      <basicHttpBinding>
        <binding name="1111111111111" closeTimeout="00:01:00" openTimeout="00:01:00"
              receiveTimeout="00:10:00" sendTimeout="00:01:00" allowCookies="false"
              bypassProxyOnLocal="false" hostNameComparisonMode="StrongWildcard"
              maxBufferSize="6553600" maxBufferPoolSize="52428800" maxReceivedMessageSize="6553600"
              messageEncoding="Text" textEncoding="utf-8" transferMode="Buffered"
              useDefaultWebProxy="true">
          <readerQuotas maxDepth="320" maxStringContentLength="8192000" maxArrayLength="163840"
              maxBytesPerRead="40960" maxNameTableCharCount="163840" />
          <security mode="None">
            <transport clientCredentialType="None" proxyCredentialType="None"
                realm="" />
            <message clientCredentialType="UserName" algorithmSuite="Default" />
          </security>
        </binding>
      </basicHttpBinding>
    </bindings>
    <client>
      <endpoint address="http://1111111111111111111111111.asmx"
                binding="basicHttpBinding" bindingConfiguration="11111111111"
                contract="1111111111111111" name="11111111111" />
    </client>
  </system.serviceModel>

以上xml节的结构就是app.config配置文件中的相同,只是添加了一些属性进行限制(对于每个属性的含义,大家有需要可以internet 查查。)显然,binding 节点的name属性和endpoint节点是可以直接从app.config
copy过来的;

Over!

时间: 2024-08-25 14:22:38

vs2012.net WebService简单的创建、使用、验证、发布后更改引用地址、web reference、service reference的相关文章

WebService 简单安全验证

转http://www.cnblogs.com/luking/archive/2011/03/04/1970592.html WebService 简单安全验证 2011-03-04 10:34 by Vincent.Studio, 9815 阅读, 0 评论, 收藏, 编辑 最近新接了一个需要调用第三方WebService的项目,看到这个第三方WebService被调用的时候,需要授权用户名和密码,于是自己也想对WebService的安全授权这个方面进行了一下研究,以前调用的WebServic

webservice简单引用

//1.创建网站//2.新建项=>添加web服务//运行texttweb.asmx可以通过访问http://域名/webservice/texttweb.asmx来验证了//3.添加服务引用=>发现服务=>确定添加//4.添加窗体调用webservive对外发布的方法,可以调用显示webservice对外开发的方法了 web服务 1 using System; 2 using System.Collections.Generic; 3 using System.Data.SqlClien

.net实现webservice简单实例分享

原理:WebService是一个SOA(面向服务的编程)的架构,它是不依赖于语言,不依赖于平台,可以实现不同的语言间的相互调用,通过Internet进行基于Http协议的网络应用间的交互.作用:主要用于数据交换.提供服务接口优点:可跨平台.部署简单调用方便.无需额外客户端支持 一.创建一个WebService服务1.创建一个普通的Asp.Net Web应用程序,名称为WebServiceDemo 2.在刚创建的web程序里添加一个WebService服务文件,名称为TestService.asm

Webservice简单概念

一.序言 大家或多或少都听过 WebService(Web服务),有一段时间很多计算机期刊.书籍和网站都大肆的提及和宣传WebService技术,其中不乏很多吹嘘和做广告的成 分.但是不得不承认的是WebService真的是一门新兴和有前途的技术,那么WebService到底是什么?何时应该用? 当前的应用程序开发逐步的呈现了两种迥然不同的倾向:一种是基于浏览器的瘦客户端应用程序,一种是基于浏览器的富客户端应用程序(RIA),当然后一种技术相对来说更加的时髦一些(如现在很流行的Html5技术),

基于CXF框架的webservice简单的SC两端出入拦截器实现。

开发工具:  ECLIPSE(EE) + CXF(2.5.9) (I)可以现在eclipse中使用JDK来创建webservice基础服务.(没有CXF框架的webservice) (1)新建一个java project. (命名为FirstWebService) 新建一个interface接口.改接口就是相当于webservice中的SEI. (在接口类定义前使用JDK自带webservice注释[email protected] SEI方法则是使用@WebMethod生命方法.) (2)在定

webservice简单了解

一:WebService的功能是什么? WebService是一种跨编程语言和跨操作系统平台的远程调用技术 所谓远程调用,就是一台计算机a上的一个程序可以调用到另外一台计算机b上的一个对象的方法,譬如,银联提供给商场的pos刷卡系统(采用交互提问的方式来加深大家对此技术的理解). 远程调用技术有什么用呢?商场的POS机转账调用的转账方法的代码是在银行服务器上,还是在商场的pos机上呢? 什么情况下可能用到远程调用技术呢?例如,amazon,天气预报系统,淘宝网,校内网,百度等把自己的系统服务以w

Java使用MyEclipse构建webService简单案例

 什么是WebServices? 它是一种构建应用程序的普遍模型,可以在任何支持网络通信的操作系统中实施运行;它是一种新的web应用程序分支,是自包含.自描述.模块化的应用,可以发布.定位.通过web调用.Web Service是一个应用组件,它逻辑性的为其他应用程序提供数据与服务.各应用程序通过网络协议和规定的一些标准数据格式(Http,XML,Soap)来访问Web Service,通过Web Service内部执行得到所需结果.Web Service可以执行从简单的请求到复杂商务处理的任何

WebService简单实现

1. WebService SOAP.WSDL.UDDISOAP(Simple Object Access Protocal,简单对象访问协议),是在分散或在分布式环境中交换信息的简单协议.WSDL(Web Services Description Language,Web服务描述语言) 对WebService 的解释说明文档,描述Web服务发布的XML格式UDDI 统一描述.发现和集成(Universal Description, Discovery, and Integration)的缩写,

玩转web之servlet(六)---session介绍及简单使用(登录验证中保存信息)

在浏览器与服务器进行交互时,往往需要把涉及到的一些数据保存下来,这时就需要使用cookie或session进行状态管理. 这篇文章先来说说session怎么用,首先在servlet中创建一个session来保存信息,举个例子,在做登陆验证时,如果登陆成功,需要将用户的信息保存到session中,怎么保存呢?下面给出代码: public class Login_Do extends HttpServlet { String order_name = ""; String order_pa