小编No1*_*ver的帖子

实体框架并发刷新和更新

我编写了一个.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)

c# concurrency entity-framework refresh updates

5
推荐指数
1
解决办法
1980
查看次数

SQL Server NText 字段限制为 43,679 个字符?

我使用 SQL Server 数据库来存储很长的 Unicode 字符串。该字段来自类型“ntext”,理论上应限制为 2^30 个 Unicode 字符。

MSDN 文档

正文

可变长度 Unicode 数据,最大字符串长度为 2^30 - 1 (1,073,741,823) 字节。存储大小(以字节为单位)是输入的字符串长度的两倍。ntext 的 ISO 同义词是国家文本。

我做了这个测试:

  1. 生成 50,000 个字符的字符串。

  2. 运行更新 SQL 语句

    UPDATE [table] SET Response='... 50,000 个字符串...' WHERE ID='593BCBC0-EC1E-4850-93B0-3A9A9EB83123'

  3. 检查结果 - 最后实际存储在字段中的内容。

结果是字段 [Response]包含43,679 个字符。字符串末尾的所有字符都被丢弃了。

为什么会发生这种情况?我该如何解决这个问题?

如果这真的是这种数据类型(ntext)的容量限制,还有哪一种数据类型可以存储更长的Unicode字符串?

sql sql-server ntext sql-update

5
推荐指数
1
解决办法
1万
查看次数

实体框架:InvalidOperationException:无效的操作。连接已关闭

我使用实体框架在数据库中执行存储过程(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)

发生这种情况时: …

c# entity-framework

5
推荐指数
1
解决办法
5605
查看次数

SignInManager.PasswordSignIn太慢了

我运行一个基于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秒).如果你让网站运行一段时间,那么第一次登录就会变得很慢.

如何解决这个问题并加快速度?我该怎么检查?

c# asp.net asp.net-mvc asp.net-membership

5
推荐指数
0
解决办法
548
查看次数

UserManager.FindById很慢

我使用此代码(其中上下文是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执行一些逻辑,但它失败了.我想知道这是否是为什么这么长时间?

我在寻找:

  1. 方法看看这是SqlException什么?也许我会解决这个问题,这段代码运行得更快.
  2. 如何修复FindByIdAsync以使其每次都能快速工作(<5秒)?

谢谢你的支持!

UPDATE …

c# asp.net asp.net-membership asp.net-identity

5
推荐指数
1
解决办法
366
查看次数

beautifulsoup 与 get_text - 处理空格

我使用 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世界!”。

我怎样才能实现我的目标?

python beautifulsoup python-3.x

5
推荐指数
1
解决办法
7024
查看次数

New-ServiceFabricApplication:找不到应用程序类型和版本

我拥有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)

项目构建成功通过。开始运行,然后停止。除输出窗口外,没有其他问题指示。

我想念什么?怎么修?

c# azure-service-fabric visual-studio-2017

5
推荐指数
1
解决办法
1568
查看次数

为同一端点使用任何类型的内容类型

我有一个 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)

c# asp.net-web-api .net-core asp.net-core

5
推荐指数
1
解决办法
1975
查看次数

Kubenetes:更改 hpa min-replica

我在 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, ...) 吗?

google-cloud-platform kubernetes kubectl

4
推荐指数
1
解决办法
2764
查看次数

Kubernetes:从 pod 中删除机密

我有 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 中删除机密?

kubernetes google-kubernetes-engine kubectl

4
推荐指数
1
解决办法
2万
查看次数