• 搭建WebService服务 【转】


    案例应用情景:WebService服务可为多平台提供企业集成、用户信息验证(解决多系统登录问题)、跨平台的信息查询服务(国内手机归属地查询、天气预报web服务、股票行情数据服务、国内飞机航班时刻表web服务、中国电视节目预告web服务、腾讯QQ在线状态web服务、Email电子邮件地址验证web服务、ip地址来源搜索web服务)图形与多媒体(验证码图片web服务 支持中文、字母、数字)、 计算与单位换算(中文简体字《-》繁体字转换web服务)

    本实例主要介绍:本地调用webservice和客户调用webservice两种情况。后面一种一般用在甲方和乙方做数据对接查询服务用,即所要的数据在对方的网站上。一方会把建好的webservice调用地址和方法名告诉对方,另一方根据该地址和方法编写客户端调用程序即下文的步骤四。

    步骤:

    一、先在站点建立WebService服务。(服务方先在自己的网站上建立webservice服务,编写好方法以便供客户方调用)

    代码:

    using System;
    using System.Collections;
    using System.Linq;
    using System.Web;
    using System.Web.Services;
    using System.Web.Services.Protocols;
    using System.Xml.Linq;

    public class myheader : SoapHeader
    {
        public string username;
        public string password;


    /// <summary>
    ///WebService 的摘要说明
    /// </summary>
    [WebService(Namespace = "http://localhost/xcweb2011/")]
    [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
    //若要允许使用 ASP.NET AJAX 从脚本中调用此 Web 服务,请取消对下行的注释。
    // [System.Web.Script.Services.ScriptService]
    public class WebService : System.Web.Services.WebService {

     public myheader my; 

     public WebService () {

        //    //如果使用设计的组件,请取消注释以下行
        //    //InitializeComponent();
    }

        [WebMethod]
        public string HelloWorld() {
         return "Hello World";
        }

      [WebMethod]  
      [SoapHeader( "my", Direction  =SoapHeaderDirection .In )]  

      public void testsoapheadin() 
      {
          System.Diagnostics.Debug.Write(my.username);
          System.Diagnostics.Debug.Write(my.password);

      } 

    }

    二、如未发布站点则建立iis站点

    三、本地调用代码(服务方本地调用,即自己站点上代码)

    四、客户端调用(客户方根据服务方给的webservice调用的https地址和方法名称而编写对应的调用程序。)

    using System;
    using System.Collections;
    using System.Configuration;
    using System.Data;
    using System.Linq;
    using System.Web;
    using System.Web.Security;
    using System.Web.UI;
    using System.Web.UI.HtmlControls;
    using System.Web.UI.WebControls;
    using System.Web.UI.WebControls.WebParts;
    using System.Xml.Linq;
    using System.IO;
    using System.Net;
    using System.Reflection;
    using System.CodeDom;
    using System.CodeDom.Compiler;
    using System.Web.Services;
    using System.Web.Services.Description;
    using System.Web.Services.Protocols;
    using System.Xml.Serialization;

    public partial class Default4 : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            // 1. 使用 WebClient 下载 WSDL 信息。
            WebClient web = new WebClient();
            Stream stream = web.OpenRead("http://localhost/xcweb2011/WebService.asmx?WSDL");

            // 2. 创建和格式化 WSDL 文档。
            ServiceDescription description = ServiceDescription.Read(stream);

            // 3. 创建客户端代理代理类。
            ServiceDescriptionImporter importer = new ServiceDescriptionImporter();

            importer.ProtocolName = "Soap"; // 指定访问协议。
            importer.Style = ServiceDescriptionImportStyle.Client; // 生成客户端代理。
            importer.CodeGenerationOptions = CodeGenerationOptions.GenerateProperties | CodeGenerationOptions.GenerateNewAsync;

            importer.AddServiceDescription(description, null, null); // 添加 WSDL 文档。

            // 4. 使用 CodeDom 编译客户端代理类。
            CodeNamespace nmspace = new CodeNamespace(); // 为代理类添加命名空间,缺省为全局空间。
            CodeCompileUnit unit = new CodeCompileUnit();
            unit.Namespaces.Add(nmspace);

            ServiceDescriptionImportWarnings warning = importer.Import(nmspace, unit);
            CodeDomProvider provider = CodeDomProvider.CreateProvider("CSharp");

            CompilerParameters parameter = new CompilerParameters();
            parameter.GenerateExecutable = false;
            parameter.GenerateInMemory = true;
            parameter.ReferencedAssemblies.Add("System.dll");
            parameter.ReferencedAssemblies.Add("System.XML.dll");
            parameter.ReferencedAssemblies.Add("System.Web.Services.dll");
            parameter.ReferencedAssemblies.Add("System.Data.dll");

            CompilerResults result = provider.CompileAssemblyFromDom(parameter, unit);

            // 5. 使用 Reflection 调用 WebService。
            if (!result.Errors.HasErrors)
            {
                Assembly asm = result.CompiledAssembly;
                Type t = asm.GetType("WebService"); // 如果在前面为代理类添加了命名空间,此处需要将命名空间添加到类型前面。

                object o = Activator.CreateInstance(t);
                MethodInfo method = t.GetMethod("HelloWorld");
               // Console.WriteLine(method.Invoke(o, null));
                Response.Write(method.Invoke(o, null));
            }

        }
    }
    五、注意开启webclient服务

    六、小技巧

    在第三步中可开启vs2008 输出窗口测试是否执行了WebService提供的方法。查看System.Diagnostics.Debug.Write(my.username);输出值。

  • 相关阅读:
    个人网站一步一步搭建——(11)使用python爬取博客园数据
    个人网站一步一步搭建——(10)后台登陆dome
    个人网站一步一步搭建——(9)路漫漫其修远矣
    个人网站一步一步搭建——(8)小小节
    个人网站一步一步搭建——(7)微动态页面前端
    个人网站一步一步搭建——(6)留言板页面前端
    Codeforces 1327D Infinite Path
    Codeforces 1316E Team Building
    Codeforces 1316D Nash Matrix
    Codeforces 1325E Ehab's REAL Number Theory Problem
  • 原文地址:https://www.cnblogs.com/Bike/p/2469756.html
Copyright © 2020-2023  润新知