我在域上有一个网站my.site
(假名)
我有它的有效证书。
我需要一个通配符证书*.my.site
(即涵盖我域的所有子域的证书)
我通过另一个注册中心的另一个经销商订购了它。
付款后,我一确认域名所有权,中介就给我发了证书。但问题是安装在my.site
其上的旧证书立即不再有效。因此,这导致了网站的轻微停机。如何避免这种情况?也许中介以某种方式应用了错误的方式?我通常天真地认为旧证书将在到期日之前有效。
我在域上有一个网站my.site
(假名)
我有它的有效证书。
我需要一个通配符证书*.my.site
(即涵盖我域的所有子域的证书)
我通过另一个注册中心的另一个经销商订购了它。
付款后,我一确认域名所有权,中介就给我发了证书。但问题是安装在my.site
其上的旧证书立即不再有效。因此,这导致了网站的轻微停机。如何避免这种情况?也许中介以某种方式应用了错误的方式?我通常天真地认为旧证书将在到期日之前有效。
我无法在现代版本的 CLR 中导航某些内容
.Net Framework 2 - 3.5 是 CLR 2
.Net Framework 4 - 4.8 是 CLR 4
.Net Core 1、2、3 和 .Net5 代码在哪个版本的 CLR 上运行?
我正在尝试使用 NUnit 为我的 Blazor WebAssembly Asp.Net-core 托管应用程序编写一个端端测试。
基于模板 3.1.7 创建了一个项目。然后我在解决方案中添加了一个 NUnit 项目并编写了一个简单的测试。
private const string serviceUrl = "https://localhost:50200";
private HttpClient _httpClient;
[OneTimeSetUp]
public void Init()
{
var arguments = new string[0];
var builder = Program.CreateHostBuilder(arguments);
_httpClient = new HttpClient();
builder
.ConfigureWebHostDefaults(w => w.UseUrls(serviceUrl))
.Build()
.Start();
}
[Test]
public async Task HomePageResponcesOk()
{
var requestUrl = serviceUrl;
var response = await _httpClient.GetAsync(requestUrl);
Assert.AreEqual(HttpStatusCode.OK, response.StatusCode);
}
[Test]
public async Task ApiResponcesOk()
{
var requestUrl = $"{serviceUrl}/WeatherForecast";
var response = await _httpClient.GetAsync(requestUrl);
Assert.AreEqual(HttpStatusCode.OK, response.StatusCode);
}
没有改变其他任何东西。
得到以下结果。
Test Duration Error Message
HomePageResponcesOk Failed 45 ms Expected: OK But was: NotFound
ApiResponcesOk Passed 364 ms
难道我做错了什么?
我还可以注意到,所有这些都适用于早期版本的 Blazor WebAssembly。
添加了更多测试
[Test]
public async Task AppCssResponcesOk()
{
var requestUrl = $"{serviceUrl}/css/app.css";
var response = await _httpClient.GetAsync(requestUrl);
Assert.AreEqual(HttpStatusCode.OK, response.StatusCode);
}
[Test]
public async Task WebAssemblyResponcesOk()
{
var requestUrl = $"{serviceUrl}/_framework/blazor.webassembly.js";
var response = await _httpClient.GetAsync(requestUrl);
Assert.AreEqual(HttpStatusCode.OK, response.StatusCode);
}
同样的事情Failed 45 ms Expected: OK But was: NotFound
。也许它app.UseStaticFiles();
不像我期望的那样工作?
我尝试
WebApplicationFactory<Startup>().CreateClient()
改用重做测试Program.CreateHostBuilder(arguments);
private const string serviceUrl = "";
private WebApplicationFactory<Startup> _factory;
private HttpClient _httpClient;
[OneTimeSetUp]
public void Init()
{
_factory = new WebApplicationFactory<Startup>();
_httpClient = _factory.CreateClient();
}
所有测试通过!但是这个选项对我不起作用,因为。我打算使用硒。
事实证明,当从带有测试的项目启动时,后端由于某种原因不知道wwwroot的实际位置。被对待UseWebRoot()
builder
.ConfigureWebHostDefaults(w =>
{
w.UseUrls(serviceUrl);
w.UseWebRoot(@"..\..\..\..\BlazorApp2\Client\wwwroot");
})
.Build()
.Start();
现在所有测试都通过了,除了WebAssemblyResponcesOk
. 可以理解:文件在不同的目录\BlazorApp2\Client\bin\Debug\netstandard2.1\wwwroot\_framework
但是,如果您添加另一个.UseWebRoot()
,它将简单地取消第一个。
好吧,我通过调试器深入了解了 Asp.Net Core 源代码。
观察到以下情况。_fileProvider
如果您运行后端项目,则为类字段StaticFileMiddleware
分配一个具有以下结构的值
CompositeFileProvider-- ._fileProviders
|
+-- NullFileProvider
|
+-- StaticWebAssetsFileProvider-- .InnerProvider
|
PhysicalFileProvider
|
+-- StaticWebAssetsFileProvider-- .InnerProvider
|
PhysicalFileProvider
一个以源中的 wwwroot 为目标,另一个以PhysicalFileProvider
wwwroot为目标/bin
如果您运行测试,那么它StaticFileMiddleware
_fileProvider
只会PhysicalFileProvider
针对UseWebRoot()
. 如果我们回到没有 的变体UseWebRoot()
,那么我们就完全得到了NullFileProvider
。
现在原图已经很清晰了。但是,仍然不清楚究竟是什么影响了 StaticFileMiddleware 作为文件提供者所获得的内容。使用类型注入将值传递给类构造函数IOptions<StaticFileOptions>
。但是我不明白我在哪里放置断点来捕获这种类型的 DI 注册。
以前,我可以像这样从相邻的 NUnit 项目启动 .Net Core 3.1 Asp.Net Core Web 应用程序
[OneTimeSetUp]
public void Setup()
{
Program.BuildWebHost(new string[] {}).Start();
}
Web 应用程序中的 Program.cs 看起来像这样
public class Program
{
public static void Main(string[] args)
{
BuildWebHost(args).Run();
}
public static IWebHost BuildWebHost(string[] args) =>
WebHost.CreateDefaultBuilder(args)
.UseConfiguration(new ConfigurationBuilder()
.AddCommandLine(args)
.Build())
.UseStartup<Startup>()
.Build();
}
但在一些更新后它停止工作。我为 NUnit 找到的只是使用建议WebApplicationFactory
private WebApplicationFactory<Startup> _factory;
private HttpClient _client;
[OneTimeSetUp]
public void GivenARequestToTheController()
{
_factory = new WebApplicationFactory<Startup>();
_client = _factory.CreateClient();
}
有用。但是,如果我不想使用这个 HttpClient,但我想使用 Selenium,例如,它就不起作用。从另一个项目启动一个项目似乎是一项平庸的任务,但由于某种原因,存在一些困难。当然,我可以手动找到程序集并启动进程,但这并不严重。
“停止工作”是指端口 5000 和 5001 没有在监听,因为它应该通过配置进行监听。也没有其他端口在监听,我扫描了整个 localhost。
在 Debug 模式下运行测试时,我在 Startup.cs 中放置了一个断点,并且没有错误地运行到最后。
感谢@Andrei Khotko 的例子 ,我们设法通过打字找到了问题的根源。将以下代码添加到Startup.cs后开始播放
public IConfiguration Configuration { get; private set; }
public void ConfigureServices(IServiceCollection services)
{
...
Configuration = new ConfigurationBuilder()
.SetBasePath(Directory.GetCurrentDirectory())
.AddJsonFile($"appsettings.json")
.Build();
services.AddSingleton<IConfiguration>(Configuration);
}
但是为什么会发生这种情况,我还是不明白。一开始我以为是由于测试项目中缺少appsetins.json文件。复制在那里,没有帮助。我检查了调试器,它Directory.GetCurrentDirectory()
返回了在构建过程中复制该文件的文件夹的路径。
那么可能是什么问题?
我的 C++ 水平接近于零。
从 github 克隆项目。我正在努力收集。出错了
E1696 无法打开源文件“config.h”
在源文件夹中,有一个 config.h.in 文件
只是重命名就够了吗?“.in”是什么意思?
曾几何时,Foo 模式中有一个 Bar 表。她在生产基地生活了很长时间,她的台词不多,但外键和其他参考资料很多。对表的读取请求每分钟执行一次,有时甚至是一秒钟。DML 查询很少见,每年大约 10-100 次。但他们从来没有遇到过问题。
然后在一个普通工作日内,DML 查询停止通过。任何 DML 错误
ora-00942 表或视图不存在
同时,读取请求也很好。这张桌子的攻击是什么?如何发现?如何取胜?
请求不能代表 Foo 或其他用户工作。
更改查询字符串中表名和字段的大小写没有帮助。
select * from all_objects where object_name like '%BAR%'
返回
OWNER | OBJECT_NAME
-------------------
FOO | BAR
select * from all_tab_columns where table_name = 'BAR'
这些字段也都是大写的,十六进制是干净的。
.
SQL> select BARID from BAR where BARID = 'XYZ';
BARID
------------------
XYZ
SQL> update BAR set BAR_NAME = 'ABC' WHERE BARID = 'XYZ';
update BAR set BAR_NAME = 'ABC' WHERE BARID = 'XYZ'
*
ошибка в строке 1:
ORA-00942: таблица или представление пользователя не существует
SQL>
添加和删除新列的 DDL 请求通过且没有错误。
重新启动实例没有帮助。
创建了一个类库 (.Net Core)类型的项目,连接库以使用我的 DBMS 中的 EF.Core(Microsoft.EntityFrameworkCore.Tools 2.2.6 的兼容版本)
在cmd中运行
cd myProjectPath
dotnet user-secrets init
dotnet user-secrets set ConnectionStrings.MyDb "User Id=MyDbUser;Password=MyDbUserPass;Data Source=MyDbHost:99999/instancename;"
两个命令都成功完成
然后我尝试在cmd中执行
dotnet ef dbcontext scaffold Name=ConnectionStrings.MyDb ...
或者在 PMC
Scaffold-DbContext Name=ConnectionStrings.MyDb ...
使用了命名连接字符串,但在应用程序的配置中找不到名称“ConnectionStrings.MyDb”。请注意,仅在使用“IConfiguration”和服务提供者时才支持命名连接字符串,例如在典型的 ASP.NET Core 应用程序中。有关详细信息,请参阅https://go.microsoft.com/fwlink/?linkid=850912。
如果只是在 PMC
Scaffold-DbContext "User Id=MyDbUser;Password=MyDbUserPass;Data Source=MyDbHost:99999/instancename;" ...
,然后一切正常,创建上下文和模型
有没有办法在本地网络上的服务器上获取磁盘使用信息?如果这是一个 Windows 服务器,那么你可以使用 WMI,我想。Linux 服务器呢?有什么通用的方法吗?
给定。英文字母有26个字符。无论按什么顺序,我们都将它们排列在 33 个键的键盘上。
接下来,我们得到了西里尔字母的 33 个字符。众所周知,其中 12 种风格(实际上)А,В,Е,К,М,Н,О,Р,С,Т,У,Х
与英语风格一致。我们随机将它们放在键盘上。
如何计算至少任何一对相似字符(例如,C
和С
)出现在同一个键上的机会?还有两对,三对等等?
如何转换一个集合
A = 1; B = 7;
A = 1; B = 3;
A = 1; B = 1;
A = 2; B = 1;
A = 2; B = 2;
A = 3; B = 4;
设置
A = 1; B = 7;
A = 2; B = 2;
A = 3; B = 4;
使用 LINQ?
要为 Pascal 编写一个即兴 IDE,我正在寻找一个控件:
允许您以 10 ^ 6 个字符显示文本,并且滚动时不会减慢速度。
允许您更改任意范围字符的字体颜色和其他一些属性(背景颜色、粗体)。
在事件处理程序中有能力按下鼠标按钮和键盘键来确定这发生在哪个字符上。这是为了显示元素对应的上下文菜单代码。
到目前为止,我已经确定了 WPF 中的 RichTextBox,但不清楚如何处理第三点。
是否有任何技巧禁止在项目代码中添加对某些方法的调用?当然,组织方面的除外。特别是,我想删除使用所有System.Windows.Forms.MessageBox.Show()
不包含参数的重载的能力IWin32Window owner
:
Show(String)
Show(String, String)
Show(String, String, MessageBoxButtons)
Show(String, String, MessageBoxButtons, MessageBoxIcon)
Show(String, String, MessageBoxButtons, MessageBoxIcon, MessageBoxDefaultButton)
Show(String, String, MessageBoxButtons, MessageBoxIcon, MessageBoxDefaultButton, MessageBoxOptions)
Show(String, String, MessageBoxButtons, MessageBoxIcon, MessageBoxDefaultButton, MessageBoxOptions, Boolean)
Show(String, String, MessageBoxButtons, MessageBoxIcon, MessageBoxDefaultButton, MessageBoxOptions, String)
Show(String, String, MessageBoxButtons, MessageBoxIcon, MessageBoxDefaultButton, MessageBoxOptions, String, HelpNavigator)
Show(String, String, MessageBoxButtons, MessageBoxIcon, MessageBoxDefaultButton, MessageBoxOptions, String, HelpNavigator, Object)
Show(String, String, MessageBoxButtons, MessageBoxIcon, MessageBoxDefaultButton, MessageBoxOptions, String, String)
未通过 NuGet 连接的库被放入项目目录的 dll 文件夹中。添加了指向它们的链接,一切正常,但是在 Visual Studio 中构建时,错误列表中会发出警告
程序集 'dll\My.dll' 被错误地列为文件。
MsBuild 想从我这里得到什么,我该如何摆脱警告?
.csproj 片段:
<Reference Include="My">
<HintPath>dll\My.dll</HintPath>
</Reference>
...
...
<Content Include="dll\My.dll" />
我遇到了一件真正让我大吃一惊的事情。
例子
class A
{
DataSet aDs;
void AFoo()
{
var b = new B();
b.BFoo();
aDs = b.bDs;
b.Dispose();
//для объекта DataSet уже выполнен Dispose,
//но мы продолжаем работать с ним,
///как ни в чём не бывало
var newrow = aDs.Tables[0].NewRow();
FillNewRow(newrow);
aDs.ows.Tables[0].Add(newrow);
}
}
class B : IDisposable
{
public DataSet bDs;
public void BFoo()
{
bDs?.Dispose();
bDs = new DataSet();
bDataAdapter.Fill(bDs);
}
// IDisposable Support
protected virtual void Dispose(bool disposing)
{
if (!disposedValue)
{
if (disposing)
{
bDs?.Dispose();
}
disposedValue = true;
}
}
}
创建了一个对象,该对象B
创建了一个对象DataSet
并将其保存在公共字段中。从这个公共字段复制一个引用,并在内部调用它Dispose
的对象,也调用它。但是我们继续使用它( c ),就好像什么都没有被调用一样。为什么会这样?B
Dispose
DataSet
DataSet
如何Action<T>
使用Task异步执行作为方法参数接收的?参数传递或异步调用本身会出现困难。例如,以下代码从不调用FinishLongOperation()
.
private async void DoAction(Action<IProgress<string>> action)
{
PrepareLongOperation();
var progress = new Progress<string>();
progress.ProgressChanged += (nothing, message) =>
{
UpdateStatus(message);
};
Task task = new Task(new Action(() => action.Invoke(progress)));
await task;
FinishLongOperation();
}
当然,在这种情况下,传输Action<T>
的代码具有完全有限的代码。
DbSet<T>.Add()
我可以通过反射获取和调用该方法 :
void AddNewEntity (DbContext db, string entityType, object newEntity)
{
PropertyInfo dbSetProp = typeof(Models.Entities)
.GetPrperty(entityType);
MethodInfo dbSetAddMethod = dbSetProp
.PropertyType
.GetMethod(nameof(DbSet<object>.Add));
object dbSet = dbSetProp.GetValue(db);
dbSetAddMethod.Invoke(dbSet, new object[] { newEntity });
}
以及如何获取和调用该方法Count
?问题是它是一种扩展方法,但是如何解决这个问题呢?
有一个第三方 TelnetClient 类。在它的帮助下,只需按一下按钮,我就可以建立连接并订阅传入的消息。通过按下另一个按钮,我发送一个命令来读取远程目录。第三方类源可用,它基于 TPL,并且HandleMessageReceived
不是从 GUI 线程调用的,所以我被迫使用 (Begin)Invoke
TelnetClient tc = null;
private async void buttonLogin_Click(object sender, EventArgs e)
{
tc = new TelnetClient("host", 23, TimeSpan.FromSeconds(3),
new System.Threading.CancellationToken());
tc.MessageReceived += HandleMessageReceived;
await tc.Connect();
await tc.Send("username");
await tc.Send("password");
}
private void HandleMessageReceived(object sender, MessageEventArgs mea)
{
this.BeginInvoke(new Action(() =>
{
textBox1.Text += mea.Message;
}));
}
private async void buttonSend_Click(object sender, EventArgs e)
{
await tc?.Send("dir");
}
该代码有效,但很糟糕:
1) 运行时间过长(几分钟)。同一主机上的任何普通 telnet 应用程序dir
执行命令的速度要快很多倍(大约一秒)。
2) 阻止 GUI。
问题
1) 为什么 GUI 被阻止?如何避免?
2)性能不佳的原因是什么?如何避免?
选择哪种服务器配置 - 专用或共享?
如果之前做出了错误的选择,选择标准是什么?如何在操作过程中从专用切换到共享,反之亦然?
团队:
ALTER SYSTEM KILL SESSION 'sid,serial#';
ALTER SYSTEM KILL SESSION 'sid,serial#' IMMEDIATE;
ALTER SYSTEM DISCONNECT SESSION 'sid,serial#';
ALTER SYSTEM DISCONNECT SESSION 'sid,serial#' IMMEDIATE;
不允许您快速删除执行不必要的长请求的会话。
在sql.ru 的年鉴中,我发现可以保证使用命令行实用程序终止 Oracle 会话:
kill/orakill (nix/win) 实现结果 -- dbms_photoshop消息
但是如何使用它们呢?
@Viktorov 给出了用例。全清。但要求:
SELECT S.SID as ORACLE_SID,
P.SPID as SPID,
S.OSUSER,
S.PROGRAM
FROM V$PROCESS P,
V$SESSION S
WHERE P.ADDR = S.PADDR;
SPID
在我的数据库上为许多会话产生相同的一个。但我只想杀死特定的。这种情况下该怎么办?
这是我查询进程配置的方式:
select server, count(*) from v$session group by server;
DEDICATED 34
NONE 269
SHARED 13
select count(*) from v$session where server='DEDICATED' and osuser!='oracle';
0