我们使用DateTime.Now,但时间不等于我们的服务器时间!
当我运行我的项目时,这些是DateTime属性值:
DateTime.Now = {15/14/04 05:20:18 AM}
DateTime.UtcNow = {15/14/04 12:20:18 PM}
Run Code Online (Sandbox Code Playgroud)
但我目前的本地系统时间是:
15/14/04 04:50:18 AM
Run Code Online (Sandbox Code Playgroud)
我的时区是德黑兰(UTC + 03:30).
这是我第一次看到这种行为!为什么不DateTime.Now等于我的电脑时间?

我读了里克·斯特拉尔写的这篇精彩的文章。据称,微软在 DotNet core 2.2 后决定添加InProcess模式,直接使用 IIS 来处理请求,而不是使用OutOfProcessKestrel Web 服务器处理进程。我们知道,在这种模式下,IIS 被用作反向 Web 服务器代理来获取请求并将其发送给 Kestrel。
<!-- hostingModel is the new property here -->
<aspNetCore processPath="dotnet" arguments=".\WebApplication1.dll"
stdoutLogEnabled="false" stdoutLogFile=".\logs\stdout"
hostingModel="InProcess" />
Run Code Online (Sandbox Code Playgroud)
然后Rick Strahl在他的文章中比较了InProcess模式和OutOfProcess模式,得到的结果是直接使用IIS而不使用Kestrel(InProcess模式)进程要快得多。(甚至他证明 IIS 使用原始 Kestrel 速度更快)
有了这个结果,我想知道为什么我们还有 Kestrel?只是为了在其他反向 Web 服务器(例如 Apache Nginx 和...)之前使用我们的 DotNet 核心应用程序?或者还有其他一些使用 OutOfProcess 有用的场景?我简单地说为什么我们应该同时使用两者(IIS + Kestrel)
我创建了一个名为drmenu.xml的新菜单.当我按下菜单按钮时它可以正常工作,但我需要在用户按下按钮时打开上下文菜单.下面的代码按钮只显示吐司.
这是我的xml布局:
<LinearLayout
android:id="@+id/MenuCall"
android:layout_width="90dip"
android:layout_height="match_parent"
android:gravity="right|center_vertical" >
<ImageView
android:id="@+id/MenuCall"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/imageiew6" />
</LinearLayout>
Run Code Online (Sandbox Code Playgroud)
这是我的java代码:
final LinearLayout callback_var = (LinearLayout) findViewById(R.id.MenuCall);
registerForContextMenu(callback_var);
callback_var.setOnClickListener(new android.view.View.OnClickListener() {
@Override
public void onClick(View arg0) {
// TODO Auto-generated method stub
Toast.makeText(getApplicationContext(), "this is repeated", Toast.LENGTH_LONG).show();
openContextMenu(callback_var);
}
Run Code Online (Sandbox Code Playgroud) 据我所知,根据 Dotnet 核心中的 Microsoft Docs,ConfigureWebHostDefaults使 Kestrel 成为项目内的默认 Web 服务器。
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.ConfigureWebHostDefaults(webBuilder =>
{
webBuilder.UseStartup<Startup>();
});
Run Code Online (Sandbox Code Playgroud)
因此,我可以Dotnet Run在我的主项目路径(包含 .sln)中使用并直接使用 Kestrel 运行该项目,而无需 IIS Express 并且它会运行(因为我可以使用 VS Express 来执行此操作)。但我想知道有什么方法可以在服务器本地主机中的发布产品(发布后)中做到这一点?我在服务器中成功地使用 IIS 托管了我的项目,并且工作正常,但出于好奇,我Dotnet run在发布根目录中运行,它返回:
欢迎使用.NET Core 3.1!--------------------- SDK版本:3.1.404
遥测 --------- .NET Core 工具收集使用数据,以帮助我们改善您的体验。它由 Microsoft 收集并与社区共享。您可以使用您喜欢的 shell 将 DOTNET_CLI_TELEMETRY_OPTOUT 环境变量设置为“1”或“true”来选择退出遥测。
了解有关 .NET Core CLI 工具遥测的更多信息: https://aka.ms/dotnet-cli-telemetry
---------------- 浏览文档: https: //aka.ms/dotnet-docs报告问题并在 GitHub 上查找源代码: https: //github.com/dotnet/core查找了解新功能: https: //aka.ms/dotnet-whats-new了解已安装的 HTTPS 开发人员证书: https: //aka.ms/aspnet-core-https使用“dotnet …
我们知道 String 是一种引用类型并且是不可变的,所以这样做是合理的。它表示存储在 Stack 中的字符串的地址及其在 Heap 部分内存中的内容存储。另一方面,我们知道“==”操作只是比较堆栈值。因此,例如,我们有以下代码,如我们在理论上所期望的那样比较两个对象。
在 Microsoft Docs 中,我们有:
默认情况下,如果两个非记录引用类型操作数引用同一个对象,则它们是相等的:
public static void Main()
{
var a = new MyClass(1);
var b = new MyClass(1);
var c = a;
Console.WriteLine(a == b); // output: False
Console.WriteLine(a == c); // output: True
}
Run Code Online (Sandbox Code Playgroud)
但我的问题是为什么在引用类型为“==”的字符串中,操作的行为类似于值类型!我只是对技术原因以及 Dotnet 如何为之而感到好奇,而不仅仅是概念(如这里)
string t1 = "test";
string t2 = "test";
bool result = t1 == t2; // output: True
Run Code Online (Sandbox Code Playgroud) 最近我尝试在我们的微服务生态系统中使用MassTransit。
根据 MassTransit 词汇和文档,我的理解是:
现在,我的问题是根据微服务的理念,遵循事件驱动的设计,我们使用Publish将消息(事件)传播到整个生态系统。但这里的Send到底有什么用法(用例)呢?只是为了在接收者不存在时获得异常?
我的下一个问题是,在微服务生态系统中同时使用Publish、Send和Requests是一种好方法吗?例如发布传播事件、发送命令(即发即忘)以及从目的地获取响应的请求。
----- 更新 我还发现克里斯·帕特森在这里澄清了很多事情。这对我也有很大帮助。
domain-driven-design masstransit event-driven-design microservices
c# ×3
.net-core ×2
asp.net-core ×2
.net ×1
android ×1
android-menu ×1
asp.net ×1
c#-9.0 ×1
datetime ×1
masstransit ×1