• C# netcore 创建WebService(SoapCore)


    C# netcore 创建WebService(SoapCore)

    在NetCore时代开发WebService和FrameWork时代差别有一点儿大,毕竟NetCore是跨平台的一个框架,NetCore 无法直接创建WebService 可以借助SoapCore来创建,下面我就使用Visual Studio2019开发一个示例服务程序。你依然要注意我这个我写的这个demo是soap1.2。在开发前你必须清楚这一点,因为有很多时候SOAP1.1和SOAP1.2 并不通用。至于soap1.1我暂时不用netcore写示例了:

    一、创建一个netcore版本空项目

    在这里插入图片描述

    二、通过NuGet安装SoapCore

    在这里插入图片描述
    这里没有版本要求,安装最新版本即可:

    三、代码示例编写

    三、这时我们新一个类用于示例的返回和接受参数,类名StudentModel 代码如下:

    [DataContract]
        public class StudentModel
        {
            /// 
            /// 学号
            /// 
            [DataMember]
            public string Sno { get; set; }
            /// 
            /// 姓名
            /// 
            [DataMember]
            public string Name { get; set; }
    
            /// 
            /// 班级
            /// 
            [DataMember]
            public string Grade { get; set; }
            /// 
            /// 生日
            /// 
            [DataMember]
            public DateTime Birthday { get; set; }
        }
    
    • 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

    添加接口约束IContract,我们和framework下保持一致,实现两个方法,Get和Add代码如下:
    注:接口属性必须引用:[ServiceContract]

    [ServiceContract]
        public interface IContract
        {
            /// 
            /// 查询学生信息
            /// 
            /// 学号
            /// 学生信息
            [OperationContract]
            StudentModel Get(string sno);
            /// 
            /// 添加学生信息
            /// 
            /// 学生信息
            /// result
            [OperationContract]
            int Add(StudentModel student);
        }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18

    添加服务实现类StudentService,来实现我们的约定服务接口。代码如下:

    public class StudentService : IContract
        {
            public StudentModel Get(string sno)
            {
                return new StudentModel() { Sno = sno, Name = "小红", Grade = "202002", Birthday = new DateTime(2012, 8, 15) };
            }
            /// 
            /// 添加学生信息
            /// 
            /// 
            /// 
            public int Add(StudentModel student)
            {
                return 1;
            }
        }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16

    在netcore中添加注入,这个想必不会陌生吧,现在netcore的注入已经很普遍了,修改 Startup.cs类中的ConfigureServices方法,添加代码如下:

    services.TryAddSingleton<IContract, StudentService>();
    services.AddSoapCore();
    
    • 1
    • 2

    写法二:

     #region 注入WebService服务
                services.TryAddScoped<IContract, StudentService>();
                services.AddSoapCore();
                #endregion 注入WebService服务
    
    • 1
    • 2
    • 3
    • 4

    添加服务发布接口地址,修改Startup.cs类中的Configure方法,在最后修改UseEndpoints这一部分代码如下:

    public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
            {
                if (env.IsDevelopment())
                {
                    app.UseDeveloperExceptionPage();
                }
    
                app.UseRouting();
                app.UseSoapEndpoint("/StudentService.asmx", new BasicHttpBinding(), SoapSerializer.XmlSerializer);
    
            }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    四、VS运行项目

    四、点击Visual Studio2019的运行按钮,此时便可以在浏览器里预览了。直接运行看到的页面是错误的地址,需要手动改一下地址如下:https://localhost:44376/StudentService.asmx,添加后半部分StudentService.asmx。我们便可以看到正常的返回了,如下图:

    在这里插入图片描述

    至此我们已经完成了一个简单的WebService,这个服务实现两个接口,一个Get 一个Add方法。

    五、调用Webservice接口

    1.使用Postman工具调用封装的Get方法示例
    在这里插入图片描述

    在这里插入图片描述
    C#代码调用示例:

    var client = new RestClient("http://localhost:44376/StudentService.asmx/Get");
    client.Timeout = -1;
    var request = new RestRequest(Method.POST);
    request.AddHeader("Content-Type", "text/xml");
    request.AddParameter("text/xml", "测试",  ParameterType.RequestBody);
    IRestResponse response = client.Execute(request);
    Console.WriteLine(response.Content);
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
  • 相关阅读:
    【力扣】1106. 解析布尔表达式(C++/Go 栈的应用)
    < Linux > 操作系统
    04_tcp
    【项目实战】自主实现 HTTP 项目(三)——请求读取与解析以及报文处理
    扫一扫,原来这么简单
    JVM学习-监控工具(一)
    【Python】爬虫代理IP的使用+建立代理IP池
    云计算-JavaAPI与Hadoop的互联的实现
    SpringMVC 拦截器
    力扣(213.337)补8.3
  • 原文地址:https://blog.csdn.net/tnb_ml/article/details/126660286