优秀的编程知识分享平台

网站首页 > 技术文章 正文

让C#的WebService项目使用Jexus部署到Linux

nanyue 2024-07-22 13:51:51 技术文章 12 ℃

起因

最近在百度统计有不少搜索 ".NetCore调用WebService",看来是想把老项目迁移到.Net Core或者.Net 5/6,其实除了客户端(WinForm,这一块主要是客户的机器可能还是万年的Windows XP,这一点在医疗行业尤其突出)还是有必要的.当然如果老项目没有依赖Windows独有的功能,还是可以将项目部署到Linux(WebForm/MVC及WebService,WCF这个没测试,后面有时间会试用一下).

创建WebService项目

创建WebService项目是和正常一样的,唯一要调用的就是在Nuget管理器中移除 Microsoft.CodeDom.Providers.DotNetCompilerPlatform,如果是老项目,这则要排除是否依赖Windows的组件.

可以参考这篇博文: 如何将Asp.Net WebForm/MVC迁移到Linux

测试代码:

public class People
{
    public string Name { get; set; }

    public int Age { get; set; }
}

using System.Web.Services;
using Newtonsoft.Json;
using WebServiceApp.Models;

namespace WebServiceApp
{
    /// <summary>
    /// WebService1 的摘要说明
    /// </summary>
    [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 WebService1 : WebService
    {

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


        [WebMethod]
        public string GetName(string name)
        {
            return JsonConvert.SerializeObject(new People() { Name = name, Age = 30 });
        }
    }
}

将WebService部署到Linux

将C#的WebService部署到Linux,这里使用的服务器软件是Jexus(jexus官网,正经的国产服务器软件,上手简单).可以简单将Jexus理解为Windows上的IIS.

Jexus集成了Mono,携带有.Net Framework的程序集,发布项目时,只需要保留项目所依赖的程序集(dll).

这里使用WSL Ubuntu 20.04安装jexus,因为自带有curl,直接通过curl下载jexus的shell然后进行安装.

//只需这一行
curl https://jexus.org/release/x64/install.sh|sh

Jexus安装路径在/usr/jexus ,默认配置文件在/usr/jexus/siteconf/default

// 启动jexus, 使用80和443端口要使用管理员权限
// sudo /usr/jexus/jws start 启动siteconf目录所有配置
sudo /usr/jexus/jws start

// 可以根据配置文件名指定启动
sudo /usr/jexus/jws start default

启动后,在浏览器中输入ip:端口号

// 这里使用wsl ip是172.29.129.199 使用的80端口 ,注意url区分大小
http://172.29.129.199/WebService1.asmx

在.Net 6同步调用WebService

在项目引用WebService有2种方式,

  1. 使用VS2022,在项目右键服务引用,有VS生成WebService引用文件.
  2. 使用dotnet-svcutil工具生成,这个需要安装

先说一下在VS怎么生成:

输入服务地址,填写要引用服务的命名空间

选择生成服务类型为WCF

选择默认配置:

需要生成同步调用:

测试调用服务代码:

ServiceApp.WebService1SoapClient service1SoapClient = new(ServiceApp.WebService1SoapClient.EndpointConfiguration.WebService1Soap);
string str = service1SoapClient.HelloWorld();
Console.WriteLine(#34;HelloWorld Result={str}");

string jsonResult = service1SoapClient.GetName("tom");
Console.WriteLine(#34;GetName Result={jsonResult}");

调用结果:

如果不想用VS生成WebService调用的代理类,就需要安装dotnet-svcutil工具.

//安装 dotnet-svcutil
dotnet tool install -g dotnet-svcutil


//通过dotnet-svcutil 生成服务代理对象  -n 命名空间 --sync 要生成同步调用
dotnet-svcutil http://172.29.129.199/WebService1.asmx?wsdl -n "*,ServiceApp" --sync

个人能力有限,如果您发现有什么不对,请私信我

如果您觉得对您有用的话,可以点个赞或者加个关注,欢迎大家一起进行技术交流

Tags:

最近发表
标签列表