如果在 Android Studio 中设置了代理,而在电脑中使用 SS 设置了全局代理,之后 SS 代理不可用时,使用 Android Studio 时会报如下错误:
Connect to 127.0.0.1:1086 [/127.0.0.1] failed: Connection refused: connect
此时即使关闭 Android Studio 代理或是关闭 SS 皆不能解决 Connect to 127.0.0.1:1086 [/127.0.0.1] failed: Connection refused: connect 错误
原因是本地的 gradle.properties 中设置了代理
注意:是本地的 gradle.properties ,并不是项目中的 gradle.properties ,项目中的 gradle.properties 中并没有设置代理
MAC 电脑的本地的 gradle.properties 在用户目录下 .gradle 文件夹中,而 .gradle 文件夹为隐藏文件,可通过快捷键 "command + shift + ." 来快速显示和隐藏文件,即如果为隐藏,则按下 "command + shift + ." 后会显示隐藏文件,再次按下后会隐藏
找到本地的 gradle.properties 文件后,注释掉如下代理行即可
systemProp.https.proxyPort=1086
systemProp.http.proxyHost=127.0.0.1
systemProp.https.proxyHost=127.0.0.1
systemProp.http.proxyPort=1086
注释方法为在前面加#,如
#systemProp.https.proxyPort=1086
#systemProp.http.proxyHost=127.0.0.1
#systemProp.https.proxyHost=127.0.0.1
#systemProp.http.proxyPort=1086
之后再重新运行即可解决 onnect to 127.0.0.1:1086 [/127.0.0.1] failed: Connection refused: connect 错误
在前一篇文章中,我给大家介绍了,如何基于微软推荐方式使用.NET Core创建Windows服务。我们发现使用这种方式,我们很容易就可以搭建和运行一个Windows服务,但是问题是使用这种方式,代码调试将非常困难。
那么现在就是Topshelf出场的时候了。Topshelf是一个.NET Standard库,它消除了在.NET Framework和.NET Core中创建Windows服务的那些麻烦。
安装#
与微软推荐方式类似,这里Visual Studio并没有提供一个基于Topshelf创建Windows服务的模板,所以我们依然需要通过创建普通控制台程序的方式,来创建一个Windows服务。
然后,我们需要通过Package Manager Console, 运行以下命令,安装Topshelf类库。
Copy
Install-Package Topshelf
代码#
下面我们就来使用Topshelf重构之前的服务代码。
Copy
public class LoggingService : ServiceControl
{
private const string _logFileLocation = @"C:\temp\servicelog.txt";
private void Log(string logMessage)
{
Directory.CreateDirectory(Path.GetDirectoryName(_logFileLocation));
File.AppendAllText(_logFileLocation,
DateTime.UtcNow.ToString() + " : " + logMessage + Environment.NewLine);
}
public bool Start(HostControl hostControl)
{
Log("Starting"www.chaoyul.com);
return true;
}
public bool Stop(HostControl hostControl)
{
Log("Stopping");
return true;
}
}
代码看起来是不是很简单?
这里我们的服务类继承了ServiceControl类(实际上并不需要,但是这可以为我们的工作打下良好的基础)。我们必须实现服务开始和服务结束两个方法,并且像以前一样记录日志。
在Program.cs文件的Main方法中,我们要写的代码也非常的简单。我们可以直接使用HostFactory.Run方法来启动服务。
Copy
static void Main(string[www.sangyuLpt.com] args)
{
HostFactory.Run(x => x.Service<LoggingService>());
}
这看起来真是太简单了。但这并不是HostFactory类的唯一功能。这里我们还可以设置
服务的名称
服务是否自动启动
服务崩溃之后的重启时间
Copy
static void Main(string[] args)
{
HostFactory.Run(x =>
{
x.Service<LoggingService>(www.baiyytwg.com/);
x.EnableServiceRecovery(r => r.RestartService(TimeSpan.FromSeconds(10)));
x.SetServiceName("TestService");
x.StartAutomatically(www.yuanyangyuL.com);
}
);
}
这里其实能说的东西很多,但是我建议你还是自己去看看Topshelf的文档,学习一下其他的配置选项。基本上你能使用Windows命令行完成的所有操作,都可以使用代码来设置: https://topshelf.readthedocs.io/en/latest/configuration/config_api.html
部署服务#
和之前一样,我们需要针对不同的Windows环境发布我们的服务。在Windows命令提示符下,我们可以在项目目录中执行以下命令:
Copy
dotnet publish -r win-x64 -c Release
现在我们就可以查看一下bin\Release\netcoreappX.X\win-x64\publish目录,我们会发现一个编译好的exe,下面我们就会使用这个文件来安装服务。
在上一篇文章中,我们是使用SC命令来安装Windows服务的。使用Topshelf我们就不需要这么做了,Topshelf提供了自己的命令行参数来安装服务。基本上使用代码能完成的配置,都可以使用命令行来完成。
你可以查看相关的文档:
<http://www.qjljdgt.cn docs.topshelf-project.com/en/latest/overview/commandline.html>
Copy
WindowsServiceExample.exe install
这里WindowsServiceExample.exe是我发布之后的exe文件。运行以上命令之后,服务应该就正常安装了!这里有一个小问题,我经常发现,即使配置了服务自动启动,但是服务安装之后,并不会触发启动操作。所有在服务安装之后,我们还需要通过以下命令来启动服务。
Copy
WindowsServiceExample.exe start
在生产环境部署的时候,我的经验是在安装服务之后,等待10秒钟,再启动服务。
调试服务#
当我们是使用微软推荐方式的时候,我们会遇到了调试困难的问题。大多数情况下,无论是否在服务内部运行,我们都不得不使用命令行标志、#IF DEBUG指令或者配置值来实现调试。然后使用Hack的方式在控制台程序中模拟服务。
因此,这就是为什么我们要使用Topshelf。
如果我们的服务代码已经在Visual Studio中打开了,我们就可以直接启动调试。Topshelf会模拟在控制台中启动服务。我们应该能在控制台中看到以下的消息。
Copy
The TestService service is www.jintianxuesha.com now running, press Control+C to exit.
这确实符合了我们的需求。它启动了我们的服务,并像真正的Windows服务一样在后台运行。我们可以像往常一样设置断点,基本上它遵循的流程和正常安装的服务一样。
我们可以通过ctrl+c, 来关闭我们的应用,但是在运行服务执行Stop方法之前,它是不能被关闭的,这使我们可以调试服务的关闭流程。与调试指令和配置标志相比,这要容易的多。
这里需要注意一个问题。如果你收到的以下内容的消息:
Copy
The TestService service is www.xcdeyiju.com running and must be stopped before running via the console
这意味着你尝试调试的服务实际上已经作为Windows服务被安装在系统中了,你需要停止(不需要卸载)这个正在运行的服务,才可以正常调试。
后续#
在上一篇中,有读者指出.NET Core中实际上已经提供了一种完全不同的方式运行Windows服务。它的实质是利用了ASP.NET Core中引入的“托管服务”模型,并允许它们作为Windows服务来运行,这真的是非常的棒。
作者:Lamond Lu
相关文章
- 07-17android studio 无法安装本地apk报错Failure [INSTALL_FAILED_NO_MATCHING_ABIS]
- 07-17Android Studio报错:Failed to delete some children. This might happen because a process has files open
- 07-17【问题笔记】Android Studio运行或打包时报错:Some file crunching failed, see logs for details
- 07-17「 五套方案 」解决 Android studio Connect to 127.0.0.1:[/127.0.0.1] failed: Connection refused
- 07-17安装android studio报错Failed to install Intel HAXM.
- 07-17Android Studio support 26.0.0-alpha1 Failed to resolve: com.android.support:appcompat-v7:27.+ 报错解决方法
- 07-17ionic真机调试Android报错 - could not read ok from ADB Server * failed to start daemon * error: cannot connect to daemon
- 07-171.MongoDB报错 Failed to connect 127.0.0.1:27017 Mongo运行错误
- 07-17ionic真机调试Android报错 - could not read ok from ADB Server * failed to start daemon * error: cannot connect to daemon
- 07-17Android Studio错误:Connect to 127.0.0.1:1080 [/127.0.0.1] failed: Connection refused: connect