我编写了一个.NET + EF应用程序.在一个线程上一切正常.在多个线程上 - 这是另一个故事.
在我的EF对象中,我有一个整数计数器.此属性标记为"Concurrency Mode = Fixed".基本上,我要做的是在几个线程上更新此计数器.喜欢这个操作:
this.MyCounter -= 1;
Run Code Online (Sandbox Code Playgroud)
因为它的并发模式已经改为"固定",所以当我想要更新已经改变的属性时 - OptimisticConcurrencyException抛出一个.
为了解决这个并发问题,我正在使用这段代码:
while (true)
{
try
{
this.UsageAmount -= 1; // Change the local EF object value and call SaveChanges().
break;
}
catch (OptimisticConcurrencyException)
{
Logger.Output(LoggerLevel.Trace, this, "concurrency conflict detected.");
EntityContainer.Instance.Entities.Refresh(RefreshMode.StoreWins, this.InnerObject);
}
}
Run Code Online (Sandbox Code Playgroud)
这段代码的结果是一个无限的(或者可能只是它看起来像)循环.每次调用this.UsageAmount -= 1throw OptimisticConcurrencyException都会导致循环再次运行.
我EntityContainer.Instance.Entities是一个单例类,提供EF上下文PER THREAD.这意味着每个线程都有一个唯一的上下文.代码:
public sealed class EntityContainer
{
#region Singlethon Implemantation
private static Dictionary<Thread, EntityContainer> _instance = new Dictionary<Thread,EntityContainer> ();
private …Run Code Online (Sandbox Code Playgroud) 我使用 SQL Server 数据库来存储很长的 Unicode 字符串。该字段来自类型“ntext”,理论上应限制为 2^30 个 Unicode 字符。
从MSDN 文档:
正文
可变长度 Unicode 数据,最大字符串长度为 2^30 - 1 (1,073,741,823) 字节。存储大小(以字节为单位)是输入的字符串长度的两倍。ntext 的 ISO 同义词是国家文本。
我做了这个测试:
生成 50,000 个字符的字符串。
运行更新 SQL 语句
UPDATE [table] SET Response='... 50,000 个字符串...' WHERE ID='593BCBC0-EC1E-4850-93B0-3A9A9EB83123'
检查结果 - 最后实际存储在字段中的内容。
结果是字段 [Response]仅包含43,679 个字符。字符串末尾的所有字符都被丢弃了。
为什么会发生这种情况?我该如何解决这个问题?
如果这真的是这种数据类型(ntext)的容量限制,还有哪一种数据类型可以存储更长的Unicode字符串?
我使用实体框架在数据库中执行存储过程(Azure SQL Server)。
我的C#代码如下所示:
using (var context = new MyDataContext())
numberOfEffectedRows = context.MySPName(this.Id);
Run Code Online (Sandbox Code Playgroud)
在大多数情况下(99.9%),这很好。但是,有时会因以下错误而失败:
System.InvalidOperationException: Invalid operation. The connection is closed.
at System.Data.SqlClient.SqlInternalConnectionTds.ValidateConnectionForExecute(SqlCommand command)
at System.Data.SqlClient.SqlInternalTransaction.Rollback()
at System.Data.SqlClient.SqlInternalTransaction.Dispose(Boolean disposing)
at System.Data.SqlClient.SqlTransaction.Dispose(Boolean disposing)
at System.Data.Entity.Infrastructure.Interception.InternalDispatcher`1.Dispatch[TTarget,TInterceptionContext](TTarget target, Action`2 operation, TInterceptionContext interceptionContext, Action`3 executing, Action`3 executed)
at System.Data.Entity.Infrastructure.Interception.DbTransactionDispatcher.Dispose(DbTransaction transaction, DbInterceptionContext interceptionContext)
at System.Data.Entity.Core.EntityClient.EntityTransaction.Dispose(Boolean disposing)
at System.Data.Entity.Core.Objects.ObjectContext.ExecuteInTransaction[T](Func`1 func, IDbExecutionStrategy executionStrategy, Boolean startLocalTransaction, Boolean releaseConnectionOnSuccess)
at System.Data.Entity.Core.Objects.ObjectContext.<>c__DisplayClass4b.<ExecuteFunction>b__49()
at System.Data.Entity.SqlServer.DefaultSqlExecutionStrategy.Execute[TResult](Func`1 operation)
at System.Data.Entity.Core.Objects.ObjectContext.ExecuteFunction(String functionName, ObjectParameter[] parameters)
at ***.MyDataContext.MySPName(Nullable`1 Id) in ***
at ***.DoSomething() in ***
Run Code Online (Sandbox Code Playgroud)
发生这种情况时: …
我运行一个基于asp.net mvc的网站5.我的网站实现了一种认证机制(带密码的电子邮件地址).我的数据库存储在Azure SQL中.
作为登录方法的一部分,我使用以下代码:
// ...
var result = await SignInManager.PasswordSignInAsync(user.UserName, model.Password, model.RememberMe, shouldLockout: true);
Run Code Online (Sandbox Code Playgroud)
此代码行需要35秒才能执行(!).这太多了......在用户体验中,似乎网页被卡住了.
我也试过非同步代码,也是同样的经历:
var result = SignInManager.PasswordSignIn(user.UserName, model.Password, model.RememberMe, shouldLockout: true);
Run Code Online (Sandbox Code Playgroud)
我发现这种缓慢的行为只在第一次登录尝试时发生.在第二次登录尝试时,它非常快(<1秒).如果你让网站运行一段时间,那么第一次登录就会变得很慢.
如何解决这个问题并加快速度?我该怎么检查?
我使用此代码(其中上下文是OAuthGrantCustomExtensionContext):
var userManager = context.OwinContext.GetUserManager<ApplicationUserManager>();
ApplicationUser appUser1 = await userManager.FindByIdAsync("My user id"); // 31 seconds to execute
ApplicationUser appUser2 = await userManager.FindByIdAsync("My user id"); // 1 milisecond to execute
Run Code Online (Sandbox Code Playgroud)
第一次执行FindByIdAsync函数需要31秒.在第二次执行时,它只需要<1 MS.我还通过运行"SELECT ... WHERE ..."查询来检查我的数据库有多快 - 而且速度非常快 - <1 MS.
我也在"输出窗口"里面的输出中注意到:
抛出异常:抛出System.Data.dll异常中的'System.Data.SqlClient.SqlException':System.Data.dll中的'System.Data.SqlClient.SqlException'异常抛出:System中的'System.Data.SqlClient.SqlException'抛出.Data.dll异常:抛出System.Data.dll异常中的'System.Data.SqlClient.SqlException':抛出System.Data.dll Exception中的'System.Data.SqlClient.SqlException':'System.Data.SqlClient.抛出System.Data.dll Exception中的SqlException:System.Data.dll中的'System.Data.SqlClient.SqlException'抛出异常:抛出System.Data.dll Exception中的'System.Data.SqlClient.SqlException':'System.抛出System.Data.dll Exception中的Data.SqlClient.SqlException:System.Data.dll中的'System.Data.SqlClient.SqlException'抛出异常:抛出System.Data.dll异常中的'System.Data.SqlClient.SqlException'异常:System.Data.dll中的'System.Data.SqlClient.SqlException'线程0x1598已退出,代码为0(0x0).抛出异常:抛出System.Data.dll异常中的'System.Data.SqlClient.SqlException':System.Data.dll中的'System.Data.SqlClient.SqlException'异常抛出:System中的'System.Data.SqlClient.SqlException'抛出.Data.dll异常:抛出System.Data.dll异常中的'System.Data.SqlClient.SqlException':抛出System.Data.dll Exception中的'System.Data.SqlClient.SqlException':'System.Data.SqlClient.抛出System.Data.dll Exception中的SqlException:System.Data.dll中的'System.Data.SqlClient.SqlException'抛出异常:抛出System.Data.dll Exception中的'System.Data.SqlClient.SqlException':'System.抛出System.Data.dll Exception中的Data.SqlClient.SqlException:System.Data.dll中的'System.Data.SqlClient.SqlException'抛出异常:抛出System.Data.dll异常中的'System.Data.SqlClient.SqlException'异常:System.Data.dll Exception中的'System.Data.SqlClient.SqlException':EntityFramework.dll'iisexp中的'System.Data.Entity.Infrastructure.RetryLimitExceededException' ress.exe'(CLR v4.0.30319:/ LM/W3SVC/6/ROOT-1-131126169736320764):已加载'EntityFrameworkDynamicProxies-EntityFramework'.抛出异常:抛出System.Data.dll异常中的'System.Data.SqlClient.SqlException':System.Data.dll中的'System.Data.SqlClient.SqlException'异常抛出:System中的'System.Data.SqlClient.SqlException'抛出.Data.dll异常:抛出System.Data.dll异常中的'System.Data.SqlClient.SqlException':抛出EntityFramework.dll异常中的'System.Data.Entity.Core.EntityCommandExecutionException':'System.Data.Entity.抛出EntityFramework.dll Exception中的Core.EntityCommandExecutionException:EntityFramework.dll中的'System.Data.Entity.Core.EntityCommandExecutionException'抛出异常:EntityFramework.dll'iisexpress.exe'中的'System.Data.Entity.Core.EntityCommandExecutionException'( CLR v4.0.30319:/ LM/W3SVC/6/ROOT-1-131126169736320764):已加载的'EntityFrameworkDynamicProxies-ObjectModelLayer'.'iisexpress.exe'(CLR v4.0.30319:/ LM/W3SVC/6/ROOT-1-131126169736320764):已加载'EntityFrameworkDynamicProxies-Microsoft.AspNet.Identity.EntityFramework'.
上面的输出是从我的机器执行此行的时间收集的:
ApplicationUser appUser1 = await userManager.FindByIdAsync("My user id");
Run Code Online (Sandbox Code Playgroud)
在其他代码行中,输出窗口为空.(这可以解释为什么他们这么快).
正如您所看到的,SqlException在此代码行中抛出了很多内容.在我看来,像一个"重试"机制,尝试agian和agian执行一些逻辑,但它失败了.我想知道这是否是为什么这么长时间?
我在寻找:
SqlException什么?也许我会解决这个问题,这段代码运行得更快.谢谢你的支持!
我使用 BS4 (python3) 从 html 文件中提取文本。我的文件如下所示:
<BODY>
<P>Hello World!</P>
</BODY>
</HTML>
Run Code Online (Sandbox Code Playgroud)
当我调用get_text()方法时,输出是Hello World!。因为它是 HTML,所以我期望得到Hello World!(两个或多个空格在 HTML 中被替换为一个空格)。
这也与这种情况相关:
<BODY>
<P>Hello
World!</P>
</BODY>
</HTML>
Run Code Online (Sandbox Code Playgroud)
我预计会找到“Hello World!” 但它是“你好\n世界!”。
我怎样才能实现我的目标?
我拥有Visual Studio 2017,并且即将开始使用Azure-Service-Fabric(C#)。
刚刚创建了具有无状态服务的Azure Service Fabric应用程序,然后尝试运行它。空项目。在代码模板上没有更改。
我在输出窗口上收到此消息:
Creating application...
New-ServiceFabricApplication : Application type and version not found
At C:\Program Files\Microsoft SDKs\Service
Fabric\Tools\PSModule\ServiceFabricSDK\Publish-NewServiceFabricApplication.ps1:358 char:9
+ New-ServiceFabricApplication -ApplicationName $ApplicationNam ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : InvalidOperation: (Microsoft.Servi...usterConnection:ClusterConnection) [New-ServiceFabr
icApplication], FabricElementNotFoundException
+ FullyQualifiedErrorId : CreateApplicationInstanceErrorId,Microsoft.ServiceFabric.Powershell.NewApplication
Finished executing script 'Publish-NewServiceFabricApplication'.
Time elapsed: 00:00:07.4935602
Run Code Online (Sandbox Code Playgroud)
项目构建成功通过。开始运行,然后停止。除输出窗口外,没有其他问题指示。
我想念什么?怎么修?
我有一个 asp.net core (v2.1) webapi 项目,它公开了此功能:
[HttpPost]
[Route("v1/do-something")]
public async Task<IActionResult> PostDoSomething(ModelData model)
{
//...
}
Run Code Online (Sandbox Code Playgroud)
和这个模型:
public class ModelData
{
[Required]
public string Email { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
从内容类型的角度来看,我想让这个端点变得灵活。因此,在正文中发送此端点不同的内容类型应该可以。
例如,将允许那些“BODY”参数:
// application/x-www-form-urlencoded
email="abc123@gmail.com"
// application/json
{
"email": "abc123@gmail.com"
}
Run Code Online (Sandbox Code Playgroud)
与旧的 .net 框架相比,在 dotnet core 中这是不允许开箱即用的。我发现我需要用属性添加Consume属性[FormForm]。但是,如果我将[FormForm]属性添加到模型参数中,它就不再适用于 JSON(例如)——因为那样它应该是[FromBody].
我认为使用这样的代码就可以了:
[HttpPost]
[Route("v1/do-something")]
public async Task<IActionResult> PostDoSomething([FromBody] [FromForm] ModelData model)
{
//...
}
Run Code Online (Sandbox Code Playgroud)
但正如您所料,这段代码不起作用。
因此,为了实现这种灵活性,我必须复制所有端点 - 这听起来是一个非常非常糟糕的主意。
[HttpPost]
[Route("v1/do-something")]
[Consume ("application/json")]
public async Task<IActionResult> …Run Code Online (Sandbox Code Playgroud) 我在 Google Cloud 中托管了 Kubernetes 集群。我创建了一个部署并为其定义了一个 hpa 规则:
kubectl autoscale deployment my_deployment --min 6 --max 30 --cpu-percent 80
Run Code Online (Sandbox Code Playgroud)
我想运行一个编辑--min值的命令,而不删除并重新创建一个新的 hpa rule。就像是:
$ kubectl autoscale deployment my_deployment --min 1 --max 30
Error from server (AlreadyExists): horizontalpodautoscalers.autoscaling "my_deployment" already exists
Run Code Online (Sandbox Code Playgroud)
这可以在命令行上编辑 hpa (min, max, cpu-percent, ...) 吗?
我有 pod 运行我的应用程序。豆荚里还藏着我的秘密。秘密映射到/secret/mysecret.json. 我使用 ssh 连接到我的 pod,并尝试从此 pod 实例中删除机密:
rm /secret/mysecret.json
Run Code Online (Sandbox Code Playgroud)
我收到错误:
rm: cannot remove 'mysecret.json': Read-only file system
Run Code Online (Sandbox Code Playgroud)
根据这篇文章,我尝试改变readOnly设置更改为False. 没有成功。
也尝试卸载它,得到错误:
$ umount /secret/mysecret.json
umount: /app/secrets/app-specific: must be superuser to unmount
Run Code Online (Sandbox Code Playgroud)
如何从 Pod 中删除机密?
c# ×6
asp.net ×2
kubectl ×2
kubernetes ×2
.net-core ×1
asp.net-core ×1
asp.net-mvc ×1
concurrency ×1
ntext ×1
python ×1
python-3.x ×1
refresh ×1
sql ×1
sql-server ×1
sql-update ×1
updates ×1