小编Eug*_*kov的帖子

为什么C#编译器会对这个嵌套的LINQ查询感到厌烦?

尝试编译以下代码,你会发现编译器需要> 3 GB的RAM(我机器上的所有可用内存)和很长的编译时间(实际上我在10分钟后得到IO异常).

using System;
using System.Linq;

public class Test
{
    public static void Main()
    {
        Enumerable.Range(0, 1).Sum(a =>
        Enumerable.Range(0, 1).Sum(b =>
        Enumerable.Range(0, 1).Sum(c =>
        Enumerable.Range(0, 1).Sum(d =>
        Enumerable.Range(0, 1).Sum(e =>
        Enumerable.Range(0, 1).Sum(f =>
        Enumerable.Range(0, 1).Count(g => true)))))));
    }
}
Run Code Online (Sandbox Code Playgroud)

任何人都可以解释这种奇怪的行为吗?

CS Version:     Microsoft (R) Visual C# Compiler version 4.0.30319.17929
OS Name:        Microsoft Windows 7 Ultimate
OS Version:     6.1.7601 Service Pack 1 Build 7601

内存使用情况

c# linq

96
推荐指数
1
解决办法
2017
查看次数

跳过IdentityServer3登录屏幕

我们已将Client App配置为通过OpenID Connect协议使用IdentityServer3身份验证(它是使用OWIN中间件支持OIDC的ASP.NET MVC App).

IdentityServer3本身配置为使用本地登录和外部登录(例如Azure AD).

在常规流程中,一旦App需要对用户进行身份验证,它会将其重定向到IdentityServer3登录屏幕 - 这很好.但在某些情况下,基于每个请求,我想以某种方式绕过登录屏幕,让IdentityServer3知道用户想要立即登录特定的外部身份提供商.

这可能吗?

图片

openid thinktecture-ident-server openid-connect thinktecture identityserver3

16
推荐指数
2
解决办法
6421
查看次数

SQL Server - 同一页面如何由两个进程独占(X)锁定?

如果我正确地解密了下面的死锁图,看起来两个进程(SPID:216和209)在同一页面上拥有独占(X)锁:

XDL <resource-list>显示

<pagelock
    fileid="1"
    pageid="17410848"
    dbid="21"
    subresource="FULL"
    objectname="33bd93e0-f5b2-43f6-93ca-56bbe6493e0c.dbo.sync_publishers2"
    id="lock630b1d5380"
    mode="X"
    associatedObjectId="72057608416264192">
    <owner-list>
        <owner
            id="process90763f08c8"
            mode="X"
            requestType="wait" />
    </owner-list>
    <waiter-list>
        <waiter
            id="process861129bc28"
            mode="X"
            requestType="wait" />
    </waiter-list>
</pagelock>
Run Code Online (Sandbox Code Playgroud)

再往下走了一点

<pagelock
    fileid="1"
    pageid="17410848"
    dbid="21"
    subresource="FULL"
    objectname="33bd93e0-f5b2-43f6-93ca-56bbe6493e0c.dbo.sync_publishers2"
    id="lock630b1d5380"
    mode="X"
    associatedObjectId="72057608416264192">
    <owner-list>
        <owner
            id="process90763f04e8"
            mode="X" />
    </owner-list>
    <waiter-list>
        <waiter
            id="process90763f08c8"
            mode="X"
            requestType="wait" />
    </waiter-list>
</pagelock>
Run Code Online (Sandbox Code Playgroud)

死锁图

它怎么可能,它意味着什么?

完整的死锁定义可在此处获得:http://pastebin.com/A4Te3Chx.

UPD:我在Microsoft Connect上提交了一个项目,试图收集权威响应:https://connect.microsoft.com/SQLServer/Feedback/Details/3119334.

sql-server deadlock

15
推荐指数
1
解决办法
929
查看次数

如何在ASP.NET Web API实现中将Array传递给OData函数?

OData V4的规范规定它必须是可能的:https: //issues.oasis-open.org/browse/ODATA-636.

"复杂类型和数组只能通过参数别名传递给函数"

当我尝试使用OData参数别名传递数组时,会发生异常.

/TestEntities/NS.TestFunction(ArrayHere=@p)?@p=[1,2,3]

结果是:

无法将"EdmValidCoreModelPrimitiveType"类型的对象强制转换为"Microsoft.OData.Edm.IEdmStructuredType"

有趣的是,元数据文档正确地为这种情况组成:

<Function Name="TestFunction" IsBound="true">
  <Parameter Name="bindingParameter" Type="Collection(NS.TestEntity)"/>
  <Parameter Name="ArrayHere" Type="System.Int32[]"/>
  <ReturnType Type="Collection(NS.TestEntity)"/>
</Function>
Run Code Online (Sandbox Code Playgroud)

ASP.NET MVC Web API 2 OData是否可以将数组传递给查询字符串中的OData函数?

更新:

以下是构建EDM模型和控制器的代码.

 var builder = new ODataConventionModelBuilder();

 builder.Namespace = "NS";

 builder.EntitySet<TestEntity>("TestEntities");

 builder.EntityType<TestEntity>().Collection
    .Function("TestFunction")
    .ReturnsCollectionFromEntitySet<TestEntity>("TestEntities")
    .Parameter<int[]>("ArrayHere");
Run Code Online (Sandbox Code Playgroud)

控制器:

public class TestEntitiesController : ODataController
{
    public IEnumerable<TestEntity> TestFunction(int[] arrayHere)
    {
        throw new NotImplementedException();
    }
}
Run Code Online (Sandbox Code Playgroud)

标记参数[FromODataUri]并不能解决问题.

更新2:

这是堆栈跟踪:

at Microsoft.OData.Core.UriParser.TypePromotionUtils.CanConvertTo(SingleValueNode sourceNodeOrNull, IEdmTypeReference sourceReference, IEdmTypeReference targetReference)
at Microsoft.OData.Core.UriParser.Parsers.MetadataBindingUtils.ConvertToTypeIfNeeded(SingleValueNode source, IEdmTypeReference targetTypeReference)
at …
Run Code Online (Sandbox Code Playgroud)

c# odata asp.net-web-api

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

Azure SQL数据库最快的备份/还原策略?

备份/还原Azure SQL数据库的最快方法是什么?

背景:我们拥有大小约为40 GB的数据库,并且Azure SQL数据库导入/导出服务以本机方式从.bacbac文件(~4GB压缩数据)恢复它需要长达6-8小时.创建.bacpac也很长,需要大约2个小时.

UPD:

在此输入图像描述

UPD. 使用CREATE DATABASE [DBBackup] AS COPY OF [DB]40 GB数据库创建数据库(通过事务一致的方式)复制只需15分钟,并且还原是简单的数据库重命名.

UPD.2014年12月.让我与您分享我们最终获得的数据库迁移架构最快方式的经验.

首先,数据层应用程序(.bacpac)的方法在DB变得稍微大一点后对我们来说是不可行的,如果你有至少一个总体大小的非聚集索引,它对你也不适用> 2 GB,直到您在导出之前禁用非聚集索引 - 这是由于Azure SQL事务日志限制.

我们坚持使用Azure迁移向导,对于数据传输,只需为每个表运行BCP(BCP的参数是可配置的),并且比使用.bacpac的方法快20%.

以下是我们在迁移向导中遇到的一些陷阱:

  1. 我们遇到了非Unicode字符串的编码问题.确保BCP导入和导出以相同的排序规则运行.它是-C ... 配置开关,您可以在MW应用程序中找到BCP调用.config文件的参数.
  2. 考虑到MW(至少是本文撰写时的实际版本)运行BCP,其参数将使约束处于非可信状态,因此不要忘记在BCP导入后检查所有不受信任的约束.

sql-server backup azure azure-sql-database

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

NuGet无法找到现有的包

如果将NuGet 作为NuGet发布到官方存储库并且它显示在https://www.nuget.org/packages/y页面上,NuGet可能会Install-Package失败.Unable to find version 'x' of package 'y'

以下是nuget.org内容和NuGet Install-Package命令输出的具体示例.

nuget包快照

安装包失败

UPDATE.包源设置为默认值(来自nuget.org).实际上你可以看到问题刚刚开始Install-Package Log4Net.Async -Version 1.3.0.

包装来源

更新2.我想强调它不是关于某些开发人员的机器 - 在Visual Studio Online Hosted Build Controller上发生了同样的事情.

更新3.以下是NuGet尝试加载包的方式,看起来NuGet API刚好坏了,因为所有这些请求都失败了,下面的错误.

install-package拦截了http请求

未找到"套餐"细分的资源

另外NuGet在VS搜索包阶段发出NuGet API调用的奇怪输出,请参见此处:http://pastebin.com/qveadrZB.

c# nuget nuget-package nuget-package-restore

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

OpenID Connect轻量级库

我正在寻找将实现这些例程的OpenID Connect(OIDC)依赖方轻量级库.

  1. 撰写"身份验证请求"
  2. 验证"id_token"签名(包括从元数据端点下载证书)
  3. 解析"id_token"JWT

要支持的唯一OIDC流是所谓的" 隐式流 ",其中服务器从授权端点(规范链接)回答"id_token"(以及"access_token",如果请求).

搜索NuGet存储库似乎只能产生唯一合适的选项--OWIN中间件,即使我可以确认它有效,但最好还是选择轻量级替代品.

OIDC隐含流量

.net c# openid single-sign-on openid-connect

11
推荐指数
1
解决办法
5705
查看次数

如何减少SQL Server事务日志的使用

我们有在Azure SQL表中写入日志的应用程序.该表的结构如下.

CREATE TABLE [dbo].[xyz_event_history]
(
    [event_history_id] [uniqueidentifier] NOT NULL,
    [event_date_time] [datetime] NOT NULL,
    [instance_id] [uniqueidentifier] NOT NULL,
    [scheduled_task_id] [int] NOT NULL,
    [scheduled_start_time] [datetime] NULL,
    [actual_start_time] [datetime] NULL,
    [actual_end_time] [datetime] NULL,
    [status] [int] NOT NULL,
    [log] [nvarchar](max) NULL,

    CONSTRAINT [PK__crg_scheduler_event_history] PRIMARY KEY NONCLUSTERED 
    (
        [event_history_id] ASC
    )
)
Run Code Online (Sandbox Code Playgroud)

表按scheduled_task_id列存储为聚簇索引(非唯一).

CREATE CLUSTERED INDEX [IDX__xyz_event_history__scheduled_task_id] ON [dbo].[xyz_event_history]
(
    [scheduled_task_id] ASC
)
Run Code Online (Sandbox Code Playgroud)

event_history_id应用程序生成的,它是随机的(不是连续的)GUID.应用程序可以从表中创建,更新和删除旧实体.该log列通常包含2-10 KB的数据,但在某些情况下它可以增长到5-10 MB.这些项目通常由PK(event_history_id)访问,最常见的排序顺序是event_date_time desc.

我们将Azure SQL的性能层降低到"S3"(100 DTU)后看到的问题是跨越事务日志速率限制.可以在sys.dm_exec_requests表中清楚地看到 - 将有等待类型LOG_RATE_GOVERNOR( …

t-sql sql-server azure

11
推荐指数
1
解决办法
969
查看次数

相对于正确配置的同步,异步模型是否真的在吞吐量方面带来了好处?

每个人都知道,异步为您提供了“更好的吞吐量”,“可伸缩性”,并且在资源消耗方面更加高效。在下面进行实验之前,我也曾想过这种(简单的)方法。它基本上表明,如果我们考虑到异步代码的所有开销,并将其与正确配置的同步代码进行比较,则几乎不会产生性能/吞吐量/资源消耗方面的优势。

The question: Does asynchronous code actually perform so much better comparing to the synchronous code with correctly configured thread pool? May be my performance tests are flawed in some dramatic way?

Test setup: Two ASP.NET Web API methods with JMeter trying to call them with 200 threads thread group (30 seconds rump up time).

[HttpGet]
[Route("async")]
public async Task<string> AsyncTest()
{
    await Task.Delay(_delayMs);

    return "ok";
}

[HttpGet]
[Route("sync")]
public string SyncTest()
{
    Thread.Sleep(_delayMs);

    return "ok";
}
Run Code Online (Sandbox Code Playgroud)

Here is response …

c# performance asynchronous async-await

11
推荐指数
1
解决办法
193
查看次数

为什么用于身份验证的 HTTP 标头称为授权?

让我引用来自 www.w3.org 的HTTP 1.1 RFC 规范

10.4.2 401未授权

该请求需要用户身份验证。响应必须包含一个 WWW- Authenticate头域(第 14.47 节),其中包含适用于请求资源的质询。客户端可以使用合适的Authorization头域(第 14.8 节)重复请求。

14.8授权

用户代理通常(但不一定)在收到 401 响应后通过在请求中包含授权请求头字段来向服务器进行身份验证。该授权域包含所述用户代理的对被请求的资源的领域中的认证信息的凭据。

为什么要在Authorization标头中传递用于证明用户身份 ( Authentication )的凭据?

authentication authorization http

10
推荐指数
1
解决办法
2885
查看次数