Tag: .net

Dapper动态返回类型

我一直在使用dapper.net,它是一个非常好的ORM映射器,它与.Net动态类型很有效但我注意到当dapper从数据库中检索数据时它返回Dapper行类型是否有任何方式我可以返回它在任何其他类型像System.Dynamic.ExpandoObject?

validationGoogle OpenID Connect JWT ID令牌

我正在尝试升级我的MVC网站以使用新的OpenID Connect标准。 OWIN中间件看起来非常强大,但不幸的是只支持“form_post”响应类型。 这意味着Google不兼容,因为它会在“#”后面的URL中返回所有令牌,因此它们永远不会到达服务器并且永远不会触发中间件。 我试图在中间件中自己触发响应处理程序,但这似乎根本不起作用,所以我有一个简单的javascript文件解析返回的声明并将它们发送到控制器动作进行处理。 问题是,即使我在服务器端获取它们,我也无法正确解析它们。 我得到的错误看起来像这样: IDX10500: Signature validation failed. Unable to resolve SecurityKeyIdentifier: ‘SecurityKeyIdentifier ( IsReadOnly = False, Count = 1, Clause[0] = System.IdentityModel.Tokens.NamedKeySecurityKeyIdentifierClause ), token: ‘{ “alg”:”RS256″, “kid”:”073a3204ec09d050f5fd26460d7ddaf4b4ec7561″ }. { “iss”:”accounts.google.com”, “sub”:”100330116539301590598″, “azp”:”1061880999501-b47blhmmeprkvhcsnqmhfc7t20gvlgfl.apps.googleusercontent.com”, “nonce”:”7c8c3656118e4273a397c7d58e108eb1″, “email_verified”:true, “aud”:”1061880999501-b47blhmmeprkvhcsnqmhfc7t20gvlgfl.apps.googleusercontent.com”, “iat”:1429556543,”exp\”:1429560143 }’.” } 我的令牌validation码遵循开发IdentityServer的优秀人员概述的示例 private async Task<IEnumerable> ValidateIdentityTokenAsync(string idToken, string state) { // New Stuff var […]

async-await threading internals

我很好奇异步等待线程内部。 每个人都声明async在性能方面要好得多,因为它释放了等待长异步调用响应的线程。 好的我明白了。 但让我们考虑一下这种情况。 我有一个异步方法在数据库上执行异步操作。 数据库的api公开函数BeginQuery和事件QueryCompleted。 我用任务包装了那些(使用TaskCompletionSource)。 我的问题是调用BeginQuery和触发事件QueryCompleted之间的内幕。 我的意思是 – 它不需要产生某种工人来解雇事件吗? 在非常低的级别,它必须是一些阻止来自db的线程读取结果的同步循环。 我想是任何异步调用都必须生成一个线程来实际处理响应(可能在驱动程序代码中的低级c ++循环中等待它)。 因此,我们唯一的“收获”是当其他一些线程正在执行其工作时,可以释放调用者线程。 调用异步方法总是创建一个新的工作线程吗? 有人可以证实我的理解吗?

从String反序列化XML

我正在尝试将我从Web服务获得的结果转换为字符串并将其转换为对象。 这是我从我的服务中得到的字符串: 2013-01-31T15:28:13.2847259ZThe processing of this task has started1Started 所以我有一个课程为: [XmlRoot] public class StatusDocumentItem { [XmlElement] public string DataUrl; [XmlElement] public string LastUpdated; [XmlElement] public string Message; [XmlElement] public int State; [XmlElement] public string StateName; } 这就是我试图通过XMLDeserializer将该字符串作为StatusDocumentItem类型的对象(NB。operationXML包含字符串): string operationXML = webRequest.getJSON(args[1], args[2], pollURL); var serializer = new XmlSerializer(typeof(StatusDocumentItem)); StatusDocumentItem result; using (TextReader reader = new […]

使用==或Equals进行字符串比较

在某些语言(例如C ++)中,您不能使用==等运算符进行字符串比较,因为它会比较字符串对象的地址,而不是字符串本身。 但是,在C#中,您可以使用==来比较字符串,它实际上会比较字符串的内容。 但是也有字符串函数来处理这种比较,所以我的问题是; 你应该? 给出两个字符串: string aa = “aa”; string bb = “bb”; 你应该像这样比较它们: bool areEqual = (aa == bb); 或者你应该使用Equal函数,如下所示: bool areEqual = aa.Equals(bb); 反正有技术差异吗? 或者最佳实践的合理论据?

如何重用Linq To Sql查询中的where子句

我有用户搜索记录类型的记录。 他们在文本框中键入搜索词,然后通过将多个字段与搜索词匹配来搜索记录。 我的查询看起来像: var results = from record in DataContext.Records where record.Field1.ToLower().Contains(term) || record.Field2.ToLower().Contains(term) || record.Field3.ToLower().Contains(term) select record; 我有许多查询都使用相同的filter,因此我想提取过滤,以便可以重复使用。 就像是: var filter = new Func( (record, term) => record.Field1.ToLower().Contains(term) || record.Field2.ToLower().Contains(term) || record.Field3.ToLower().Contains(term) ); var results = from record in DataContext.Records where filter(record, term) select record; 但是,它不起作用,因为: 方法’System.Object DynamicInvoke(System.Object [])’没有受支持的SQL转换。 如何跨查询重用where where条件?

使用RSA公钥解密使用RSA私钥加密的字符串

我知道我可能会得到的主要答案是你为什么要这么做?! 不幸的是,尽管我有抗议,但我必须这样做,尽管我知道它没什么意义。 我有.Net编写的函数使用私钥解密,使用公钥加密。 我也签署并validation并对我认为这一切的工作方式有一个合理的理解。 我现在被发送一个使用私钥进行RSA加密的值,我应该通过使用公钥解密来获得可用值。 我似乎无法弄清楚如何做到这一点。 我是个白痴吗? 这是正常的事吗? 发送给我的人告诉我这在PHP中没问题。 我不知道,还没有使用过PHP。 我找不到一个库,用我所知的任何主要语言,即C ++,Java,C#。 我正在使用的服务器使用.Net。 我希望有人可以帮助我。 如果除了乞求他们改变他们正在做的事情之外还有某种合理的解决方案,那将是很棒的。 这是我的方法(根据Iridium指出的我之前的错误更新)但是当我尝试解密该值时,我得到了一个exception “解码OAEP填充时出错。” 如果我使用rsa.Decrypt(bytes,false),我会得到一个错误的密钥exception。 public static string DecryptUsingPublic(string dataEncrypted, string publicKey) { if (dataEncrypted == null) throw new ArgumentNullException(“dataEncrypted”); if (publicKey == null) throw new ArgumentNullException(“publicKey”); try { RSAParameters _publicKey = LoadRsaPublicKey(publicKey, false); RSACryptoServiceProvider rsa = InitRSAProvider(_publicKey); byte[] bytes = Convert.FromBase64String(dataEncrypted); […]

为什么.net使用JIT编译器而不是仅在目标机器上编译一次代码?

标题几乎总结了一下,但我想知道为什么像.net这样的系统每次运行时都会编译代码,而不是只在目标机器上编译一次?

Winforms:如何加速Invalidate()?

我正在GDI +中开发一个保留模式绘图应用程序。 应用程序可以将简单的形状绘制到canvas并执行基本编辑。 执行此操作的数学运算优化到最后一个字节,不是问题。 我正在使用内置Controlstyles.DoubleBuffer的面板上绘图。 现在,如果我在大显示器上运行我的应用程序(在我的情况下为HD),我的问题就出现了。 如果我尝试从(大)canvas的一角绘制一条线到对角线的另一角,它将开始滞后并且CPU变高。 我的应用中的每个图形对象都有一个边界框。 因此,当我使从最大化应用程序的一个角落到对面角落的行的边界框无效时,该边界框几乎与canvas一样大。 当用户绘制一条线时,这个边界框的失效因此发生在mousemove事件上,并且有明显的滞后可见。 如果线是canvas上的唯一对象,则也存在此延迟。 我试图在很多方面优化它。 如果我画一条较短的线,CPU和滞后就会下降。 如果我删除Invalidate()并保留所有其他代码,该应用程序很快。 如果我使用Region(仅跨越图形)来使invalidate而不是boundingbox失效,那就慢了。 如果我将边界框拆分成一系列背靠背的小方框,从而减少了无效区域,则无法看到可见的性能增益。 因此,我在这里不知所措。 如何加快失效? 另外,Paint.Net和Mspaint都有同样的缺点。 但是,Word和PowerPoint似乎能够如上所述绘制一条线,没有延迟,也没有CPU负载。 因此有可能达到预期的效果,问题是如何?

Linq ToList / ToArray / ToDictionary性能

好吧,我遇到很多情况,IEnumerable是不够的。 但是我不确定上述方法调用的性能。 我真正想问的是: 是ToList / ToArray的性能: 一个O(n)操作,它将IEnumerable复制到一个新的数组/列表? 如果我在列表上调用linq扩展方法,如果我调用ToList则它具有O(1)性能,如果调用ToArray则具有O(n)(如果我的原始列表是数组则相反)? 一些魔法发生了,性能是O(1)? 字典可能是O(n),对吧?