小编Mat*_*sby的帖子

具有Action <T>参数的通用方法

所以,我确信之前已在某处回答过,但我无法在任何地方找到它.希望一些仿制药大师可以提供帮助.

public interface IAnimal{}
public class Orangutan:IAnimal{}

public void ValidateUsing<T>(Action<T> action) where T : IAnimal
{
    Orangutan orangutan = new Orangutan();
    action(orangutan);  //Compile error 1

    //This doesn't work either:
    IAnimal animal = new Orangutan();
    action(animal);  //Compile error 2
}
Run Code Online (Sandbox Code Playgroud)
  1. 参数类型'T'不能赋予参数类型'Orangutan'
  2. 参数类型'IAnimal'不能分配给参数类型'T'

编辑:基于Yuriy和其他人的建议,我可以做一些演员,如:

public void ValidateUsing<T>(Action<T> action) where T : IAnimal
{
    Orangutan orangutan = new Orangutan();
    action((T)(IAnimal)orangutan);

    //This doesn't work either:
    IAnimal animal = new Orangutan();
    action((T)animal);
}
Run Code Online (Sandbox Code Playgroud)

我想要做的是调用ValidateUsing方法,如下所示:

ValidateUsing(Foo);  
Run Code Online (Sandbox Code Playgroud)

不幸的是,如果foo看起来像这样:

private void Foo(Orangutan obj)
{
    //Do something
} …
Run Code Online (Sandbox Code Playgroud)

c# generics delegates

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

为什么BasicHttpBinding不需要主体名称在IIS7上使用Kerberos Auth?

我对Kerberos身份验证的工作方式了如指掌,但对于我的生活,我无法解释我在IIS托管的WCF服务中看到的奇怪行为.

我已经设置了一个非常简单的WCF应用程序,它使用BasicHttpBinding和TransportCredentialOnly公开端点.我的理解是,要使Kerberos工作,客户端必须指定用户主体名称或服务主体名称.由于某种原因,它在不同的绑定类型中似乎不一致.

当我省略这个主要名称时,在IIS6上,NTLM最终被使用.在IIS7上,它使用Kerberos.当我在IIS6上指定用户主体名称时,使用Kerberos但在IIS7上调用失败(Wireshark在Kerberos握手期间显示KRB_AP_ERR_BADMATCH错误).

当我使用Message安全性将绑定切换到WSHttpBinding时,它变得更加有趣.在该实验中,如果我没有在IIS6上指定用户主体名称,则调用失败,并且在IIS7上使用NTLM.当我指定UPN时,IIS6失败,II7最终使用Kerberos.以下是我的发现摘要.如果那里的任何人可以帮助我解决正在发生的事情,我会永远感激.

汇总表

.net c# wcf

8
推荐指数
1
解决办法
840
查看次数

标签 统计

c# ×2

.net ×1

delegates ×1

generics ×1

wcf ×1