我花了大约4个小时调查,仍然无法找到如何运行已发布的应用程序(dotnet publish
)
现在,我可以下载源到我的远程机器,然后调用dotnet build
和dotnet run
-然后我的应用程序运行的预期.但我想在没有源文件的情况下将DLL(或*.so?)发布到我的VPS.
官方文档说什么?在project.json中定义命令
"commands": {
"web": "Microsoft.AspNet.Server.Kestrel --server.urls http://unix:/var/aspnet/HelloMVC/kestrel.sock",
}
Run Code Online (Sandbox Code Playgroud)
但它是obsolette,不是吗?
那么默认样品呢?
在默认的VS2015示例解决方案中,他们使用的是publish-iis,完整的.NET框架和IIS服务器,但是没有关于Linux上的部署.
postpublish": [ "dotnet publish-iis --publish-folder %publish:OutputPath% --framework %publish:FullTargetFramework%" ]
Run Code Online (Sandbox Code Playgroud)
这是我的dotnet信息
.NET Command Line Tools (1.0.0-preview1-002702)
Product Information:
Version: 1.0.0-preview1-002702
Commit Sha: 6cde21225e
Runtime Environment:
OS Name: Windows
OS Version: 10.0.10586
OS Platform: Windows
RID: win10-x64
Run Code Online (Sandbox Code Playgroud)
.NET Core RC2
我正在努力熟悉OWIN,有很多让我感到困惑的事情.例如,在部分startup.cs类中,我通过注册上下文回调
app.CreatePerOwinContext(ApplicationDbContext.Create);
app.CreatePerOwinContext<ApplicationUserManager>(ApplicationUserManager.Create);
Run Code Online (Sandbox Code Playgroud)
有什么不同?为什么我们需要这种通用方法?
我可以得到这样的上下文:
context.Get<ApplicationDbContext>())
context.GetUserManager<ApplicationUserManager>()
Run Code Online (Sandbox Code Playgroud)
Get和GetUserManager方法有什么区别?为什么我不能只调用context.Get for ApplicationUserManager?
我正在尝试使用HttpClient显示下载进度.为此,我使用System.Progress<T>
.代码如下所示:
long totalRead = 0L;
var buffer = new byte[1024];
bool isMoreToRead = true;
ulong total = (ulong)response.Content.Headers.ContentLength;
while (isMoreToRead)
{
int read = await stream.ReadAsync(buffer, 0, buffer.Length);
if (read == 0)
isMoreToRead = false;
else
{
var data = new byte[read];
buffer.ToList().CopyTo(0, data, 0, read);
totalRead += read;
progress.Report((int) (totalRead*1d / total * 1d * 100) );
}
}
Run Code Online (Sandbox Code Playgroud)
假设订阅看起来像这样:
var progress = new Progress<int>();
progress.ProgressChanged += (sender, i) => Console.WriteLine(i);
client.Download(file, progress).Wait();
Run Code Online (Sandbox Code Playgroud)
但结果是,进度顺序不一致,如:10,20,30,70,15,90,100,80.
这是默认委托的行为,还是有另一个原因?
大家都知道,不允许从后台线程更新UI(或不?)
我做了一个小实验.这是一段代码:
var thread = new Thread(() => progressBar1.Increment(50));
thread.IsBackground = true;
thread.Start();
thread.Join();
Run Code Online (Sandbox Code Playgroud)
我将此代码放在一些按钮单击处理程序中.知道吗?我的进度条正在递增...从后台线程.现在我很困惑.我不明白它是如何可能的以及我做错了什么
我们决定将我们的应用程序从 Service:LoadBalancer 迁移到 Ingress,我选择了Nginx Ingress Controller,因为我很熟悉它,而且它是 Kubernetes 世界中最受欢迎的控制器之一
之前我们有 Nginx => Uwsgi 组合来支持 ELB。我们从源代码编译 nginx,因为我们需要一些 3rd 方模块和 Lua 支持。
ELB => Nginx Server => UWSGI
ELB => Nginx Ingress (Load Balancer) => Nginx (Server) => UWSGI
Run Code Online (Sandbox Code Playgroud)
我的问题是:代理链中可以有 2 个 nginx 吗?
我理解一个是扮演LoadBalancer的角色,另一个就是服务器本身。但对我来说,它伴随着痛苦,就像如果我更改服务器 nginx.conf 中的某些选项,例如将客户端主体的大小增加到 8MB,我应该在 Nginx-Ingress 上执行相同的操作。另外我想知道如何设置超时:因为 ingress=>server 和 server=>uwsgi 之间存在超时,并且一般来说,在请求到达应用程序之前如何在拥有 3 个代理的情况下调整性能?
删除 Nginx Server 以便 Ingress Controller 同时充当服务器和负载均衡器是一个好习惯吗?我们使用的第三方模块怎么样?