圈地

本次要求是创建webservice服务,并发布到linux(使用NET6开发)

在vs2022中,如果需要创建webservice服务,需要使用第三方包soapcore来创建。以下是过程:

1、安装soapcore,nuget搜索到soapcore-net5.0即可,本次使用版本号为1.1.0.10。

2、创建接口类,ServiceContract、OperationContract是webservice服务要求的必须树形,大概理解为对应的服务和方法,注意这里的参数需要使用string(xml数据使用<![CDATA[XXX]]>包裹),这里的方法名和形参会作为节点元素出现在xml中。

vs2022发布docker vs2022发布webservice_.net

3、接口实现类,这里使用XmlSerializer对字符串进行反序列化,需要区别和json反序列化有所不同,这里只记录xml反序列,xml字符串中的根节点对应class类名,即:

public class Request
{

        public Header Header { get; set; }


        public Body Body { get; set; }
}

public class Header
{
        xxx
}

public class Body
{
        xxx
}


//xml string

<Request>
    <Header>xxx</Header>
    <Body>xxx</Body>
</Request>

 

vs2022发布docker vs2022发布webservice_xml_02

 4、依赖注入,startup文件中,这里使用Scope,顺带提下webservice接口的WSDL配置方法,附上效果图。

vs2022发布docker vs2022发布webservice_linux_03

vs2022发布docker vs2022发布webservice_.net_04

 5、以上webservice服务部分的代码已经完事了,注意如果代码有路径,需要区别windows和linux路径中的斜杠。

 6、本次使用mysql,nuget下载包

Pomelo.EntityFrameworkCore.MySql,

Microsoft.EntityFrameworkCore

在appsettings.json中配置连接字符串

vs2022发布docker vs2022发布webservice_linux_05

7、首先在windows中测试下接口,这里提下一个数据类型:c#中的guid回应mysql中从char(36)

8、接下来就是准备发布到linux中,这里是使用docker方式,选择docker支持,选择目标os:Linux,会自动在项目根目录下生成Dockerfile,记得修改 EXPOSE 端口号

 

vs2022发布docker vs2022发布webservice_vs2022发布docker_06

9、将项目文件打包,使用xshell上传到linux中解压,zip解压时,注意乱码文件

unzip -O CP936 xxx.zip

根据Dockerfile中指定的编译和发布的目录进行创建,否则会导致发布失败

10、创建镜像,创建容器

在dockerfile所在目录下执行来创建镜像,里面的点不能省略
docker  build -t 镜像名 .    
或者
docker build -t 镜像名 -f Dockerfile . 

创建并运行容器

docker run --name 容器名 -p 80:80 -d 镜像名


查看镜像命令:docker image ls 
查看容器命令:docker ps -a
进入容器命令:docker exec -it 容器名 /bin/bash

 11、容器运行后webservice服务运行正常,使用soapui测试也没问题,但是发现接口调用后没有生成日志,查看配置文件中还是使用的windows下的反斜杠,修改后重新发布,进入容器后手动创建日志目录后正常。