天天看点

C# Web Service & Interface Introduction

一  Web Service的创建

1.在WebApplication下创建WebService

2.创建Request类与Response类,用于传参和返回参数。

Request是接口参数,在对方调接口函数时填写的参数。

Response是接口函数的返回值,一般返回接口执行状态和对应的信息。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;

namespace MinthInterfaceService.Model
{
    [Serializable]
    public class Request
    {
        public string Parameter1 { get; set; }
        public string Parameter2 { get; set; }
        public string Parameter3 { get; set; }
       
    }

    [Serializable]
    public class Response
    {
        public bool Flag { get; set; }
        public string Message { get; set; }
    }
}
           

3.在asmx文件中完成接口方法的创建

using MinthInterfaceService.Model;
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Web;
using System.Web.Services;
using System.Xml;
using System.Xml.Serialization;

namespace MinthInterfaceService
{
    /// <summary>
    /// Summary description for WebServiceDemo
    /// </summary>
    [WebService(Namespace = "http://tempuri.org/")]
    [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
    [System.ComponentModel.ToolboxItem(false)]
    // To allow this Web Service to be called from script, using ASP.NET AJAX, uncomment the following line. 
    // [System.Web.Script.Services.ScriptService]
    public class WebServiceDemo : System.Web.Services.WebService
    {

        [WebMethod]   
        public Response WebServiceMethod(Request request)
        {
            Response response = new Response();
            try
            {
                string requestXmlDoc = string.Empty;
                using (MemoryStream stream = new MemoryStream())
                {
                    XmlSerializer xmlSerializer = new XmlSerializer(typeof(Request));
                    xmlSerializer.Serialize(stream, request);
                    requestXmlDoc = Encoding.UTF8.GetString(stream.ToArray());//序列化
                }

                response.Flag = true;
                response.Message = "Succeed to run the interface.";

                XmlDocument xmlDoc = new XmlDocument();
                xmlDoc.LoadXml(requestXmlDoc);
                XmlNode Request_xml = xmlDoc.SelectSingleNode("Request");//反序列化
                if(Request_xml != null)
                {
                    string p1 = Request_xml["Parameter1"].InnerText;
                    int p2 = int.Parse(Request_xml["Parameter2"].InnerText);
                    DateTime p3 = DateTime.Parse(Request_xml["Parameter3"].InnerText);
                    //method(對數據處理的方法)
                }




            }
            catch(Exception ex)
            {
                response.Flag = false;
                response.Message = "Failed to run the interface:"+ex.Message.ToString();
            }
            return response;
            
        }
    }
}
           

经过以上三步,Web Service的创建已经完成。

二  Web Service 的发布

1.Buid创建接口的WebApplication

2.Publish The WebApplication,将生成文件夹,里面包含要发布的接口。

3.打开IIS,创建Site。Physical path 选择刚才publish的document.

初次使用IIS,在访问接口时,可能会出现权限问题。

添加权限:在Edit Permissions->Security Tab 中添加Everyone,fullcontrol.

4.若可以访问,则Web Service就发布完成。

三  Web Service的调用:

1.添加Web Service引用

右键点击需要引用该Web Service 的 WebApplication---->add---->Service Reference---->Advanced---->Add Web Reference---->URL填写发布的地址---->Web Reference name

在添加完成后,会生成一个Web Reference的文件夹,包含添加的Web Service.

2 调用Web Service

protected void Button5_Click(object sender, EventArgs e)
        {
            WebServiceDemo webServiceDemo = new WebServiceDemo();
            Request request = new Request()//此處的Request在接口中已經定義,不需要再定義
            { Parameter1_string = "Hello",
                Parameter2_int = 1,
                Parameter3_datetime = DateTime.Now
            };
            Response response = webServiceDemo.WebServiceMethod(request);
            if(response.Flag == true)
            {

            }
            else if(response.Flag == false)
            {
                string errorMessage = response.Message;
            }
        }