WebService

//SOA:面向服务架构(Service-Oriented Architecture),是构造分布式系统的方法论,也会提供一些标准和工具
//把大的系统拆成子模块,以服务的形式提供
//一般多个老系统重构的时候还需要一个数据总线,存储服务的地址和调用方式,还可以检测服务的状态(心跳检测)
//分布式服务的框架:dubbo,zookeeper,ocelot(网关)+consul(服务注册和发现)
//分布式事务:
//  1.DTC   TransactionScope    必须是Windows,局域网,需要对机器进行配置
//  2.事务补偿  命令,正命令/反命令
//  3.异步队列  把回退动作放到队列中,有延迟,回退会有个等待时间

//.net Remoting .net平台的分布式框架  CS/BS都可以  效率很高,传递的不是值,是引用

//WebService:寄宿在IIS,就是必须包括在网站项目中

//http协议是传输信道协议
//soap协议是数据封装格式:描述不同服务之间的数据交互的一个轻量级协议
//WSDL:webservice discription language 服务描述语言--一个webservice有什么东西怎么用在这里描述
//UDDI:根据WSDL查找服务的机制

//服务端调用WebService添加服务引用,svcUtil.exe自动生成,基于wsdl生成的一个代理

//单元测试更多是为了回归测试
using Newtonsoft.Json;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Services;
using System.Web.Services.Protocols;

namespace MySOA.Web.WebService
{

    [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 MyWebService : System.Web.Services.WebService
    {
        //[WebMethod],要暴露的方法必须有这个特性
        //要暴露的方法方法不能重载
        //可以直接返回对象

        //http传输协议   数据格式是xml

        //SoapHeader验证
       public CustomSoapHeader SoapHeaderProp { set; get; }

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

        public string HelloWorld(int x)
        {
            return "Hello World";
        }

        [WebMethod]
        [SoapHeaderAttribute("SoapHeaderProp")]
        public string GetName(int x, int y)
        {
            if (!SoapHeaderProp.Validate())
            {
                throw new SoapException("验证失败", SoapException.ClientFaultCode);
            }
            return JsonConvert.SerializeObject(new
            {
                id = 11,
                Name = "小王",
                Remark = $"x={x},y={y}"
            });
        }

        [WebMethod]
        [SoapHeaderAttribute("SoapHeaderProp")]
        public UserInfo GetUser(int age)
        {
            if (!SoapHeaderProp.Validate())
            {
                throw new SoapException("验证失败", SoapException.ClientFaultCode);
            }
            return new UserInfo
            {
                Id = 11,
                Name = "小王",
                Age = age
            };
        }

        [WebMethod]
        [SoapHeaderAttribute("SoapHeaderProp")]
        public List<UserInfo> GetUserList(int age)
        {
            if (!SoapHeaderProp.Validate())
            {
                throw new SoapException("验证失败", SoapException.ClientFaultCode);
            }
            return new List<UserInfo>
            {
                new UserInfo(){
                    Id = 11,
                    Name = "小王",
                    Age = age
                },
                new UserInfo(){
                    Id = 11,
                    Name = "小高",
                    Age = age
                },
            };
        }
    }
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Services.Protocols;

namespace MySOA.Web.WebService
{
    public class CustomSoapHeader : SoapHeader
    {
        public string UserName { set; get; }
        public string PassWord { set; get; }

        //必须有一个无参构造类
        public CustomSoapHeader()
        { }

        public CustomSoapHeader(string userName, string passWord)
        {
            this.UserName = userName;
            this.PassWord = passWord;
        }

        //验证
        public bool Validate()
        {
            return this.UserName.Equals("小王") && this.PassWord.Equals("123456");
        }
    }
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;

namespace MySOA.Web.WebService
{
    public class UserInfo
    {
        public int Id { set; get; }
        public int Age { set; get; }
        public string Name { set; get; }
    }
}
using System;
using System.Collections.Generic;
using Microsoft.VisualStudio.TestTools.UnitTesting;

namespace MySOA.UnitTestProject.Tests
{
    [TestClass]
    public class UnitTestWebService
    {
        //加上这个特性,可以在这个方法中初始化测试对象,加日志等,当然静态构造函数也可以
        [TestInitialize]
        public void Init()
        {
            Console.WriteLine("完成初始化");
        }

        static UnitTestWebService()
        {
            Console.WriteLine("静态构造函数完成初始化");
        }

        [TestMethod]
        public void TestMethod1()
        {
            //WebService要使用using,http用完释放
            //地址可以在配置中改变
            //< endpoint address = "http://localhost:8088/WebService/MyWebService.asmx"
            using (MyWebServiceTest.MyWebServiceSoapClient myWebService = new MyWebServiceTest.MyWebServiceSoapClient())
            {
                MyWebServiceTest.CustomSoapHeader soapHeader = new MyWebServiceTest.CustomSoapHeader();
                soapHeader.UserName = "小王";
                soapHeader.PassWord = "123456";
                //断言:判断结果是否是预期
                Assert.AreEqual(myWebService.HelloWorld(), "Hello World");
                //Assert.AreEqual(myWebService.HelloWorld(), "Hello World111");
                var rst0 = myWebService.GetName(soapHeader, 10, 8);
                var rst1 = myWebService.GetUser(soapHeader, 18);
                //默认是数组,在配置服务引用中配置下,根据自己需要配置
                var rst2 = myWebService.GetUserList(soapHeader, 18);
                //配置服务引用中配置称List,但是添加了SoapHeader后又变成了数组,重新引用也不行
                //List<MyWebServiceTest.UserInfo> userInfos = myWebService.GetUserList(soapHeader, 18);
            }
        }
    }
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值