在C#中,当覆盖方法时,允许在原始方法不是时使覆盖异步.这似乎很糟糕.
令我惊讶的问题是:我被引入以协助负载测试问题.在大约500个并发用户中,登录过程将分解为重定向循环.IIS正在使用消息"在异步操作仍处于挂起状态时完成异步模块或处理程序"来记录异常.一些搜索让我觉得有人在滥用async void,但我对源头的快速搜索一无所获.
可悲的是,我正在寻找async\s*void(正则表达式搜索)我应该寻找更多的东西async\s*[^T](假设任务不完全合格......你明白了).
我后来发现的是async override void onActionExecuting在一个基本控制器中.显然,这必须是问题,而且确实如此.修复它(使其暂时同步)解决了问题.
但它给我留下了一个问题:为什么当调用代码永远不会等待它时,你可以将覆盖标记为异步?
错误:
ID4175:IssuerNameRegistry无法识别安全令牌的颁发者.要从此颁发者接受安全性令牌,请配置IssuerNameRegistry以返回此颁发者的有效名称.
情况:我在一台IIS服务器(我的QA环境)上运行了3或4个asp.net应用程序,今天早上开始返回此错误.我从一个匿名站点开始,单击指向安全部分的链接,重定向到我的联合服务代理,进行身份验证,然后重定向回我的安全页面,但会出现此错误.
这个链接和其他一些链接表明我的web.config中的指纹是错误的,但我可以证明(通过TFS中的历史记录)我的web.config文件中的指纹没有改变.
我已经尝试重新运行fedutil,但仍然得到相同的消息(尽管它提供了不同的指纹).有任何想法吗?
我一直在使用MetadataType属性将验证属性添加到我使用T4模板生成的类中.这非常有效,但我希望能够在某些属性上使用DefaultValue属性,这样我的MetadataType类将更完整地描述我的类(因此我不必在这些类中实现OnCreated方法) .我可以将该属性添加到我的MetadataType类,但它没有任何效果.
这是一些示例源 - 生成的部分(当然)在不同的文件中.如果我实例化Widget对象,则Name属性将为null.
/// <summary>
/// This part is generated
/// </summary>
public partial class Widget
{
public string Name { get; set; }
}
/// <summary>
/// This part is hand-coded so I can add attributes, custom methods etc.
/// </summary>
[System.ComponentModel.DataAnnotations.MetadataType(typeof(WidgetMetadata))]
public partial class Widget
{
}
/// <summary>
/// This part is hand-coded, and any validation attributes I add work fine.
/// </summary>
public class WidgetMetadata
{
[System.ComponentModel.DefaultValue("Default Name")]
[StringLengthValidator(0, RangeBoundaryType.Inclusive, 320, RangeBoundaryType.Inclusive, Tag = …Run Code Online (Sandbox Code Playgroud) 所以我有:
应用A:需要B类(不同的组装)
B级:需要C级(同样,不同的装配)
C类:使用容器来解析各种对象,但容器的生命周期(以及它解析的对象)应该由组合根控制.
我想我理解这在大多数情况下是如何工作的,但是在C类中,我需要根据传入的对象的属性来解决.
我认为我要问的是,容器是否成为依赖关系,因此,如何最好地将它放在需要的地方(不确定我是否真的希望通过一堆构造函数传递它) - 属性注入是要走的路?)
我相信这个来源尽可能干净简洁:
namespace InjectionTest
{
using System;
using Microsoft.Practices.Unity;
public class ApplicationA
{
static void Main(string[] args)
{
using (IUnityContainer container = new UnityContainer())
{
// Normally I'd use this, but for clarity in the example, I'm doing it in code.
//container.LoadConfiguration();
container.RegisterType<IClassB, ClassB>();
container.RegisterType<IClassC, ClassC>();
container.RegisterType<IFooBuilder, FrobBuilder>("frob");
container.RegisterType<IFooBuilder, WidgetBuilder>("widget");
IClassB machine = container.Resolve<IClassB>();
InitialObject bar = new InitialObject() { Name = "widget" };
machine.doSomethingWithBar(bar);
bar = new InitialObject() { Name = "frob" …Run Code Online (Sandbox Code Playgroud) 我不是在考虑这个问题 - 我对C#和VB很满意,但两者都不熟练.但是,我们团队中的一些人已经表达了这样做的意图,因为我们正在将C#作为标准.