小编met*_*art的帖子

Digital Nirvana:一个不存在的方法的callvirt最终会在哪里?

我在库类上调用属性set-accessor,它的基类被标记为抽象.现在,在运行时,我强制应用程序针对该库的另一个版本运行,其中该类仅实现基类的底层接口,但不是从它派生的.

有趣的是,.NET将运行代码,但设置属性不起作用.幕后发生了什么?

违规守则:

MyDbParameter param = new MyDbParameter();
param.ParameterName = "p";
Console.Out.WriteLine("ParameterName: " + param.ParameterName);
Run Code Online (Sandbox Code Playgroud)

图书馆2.0(已编译)

public sealed class MyDbParameter : System.Data.Common.DbParameter
{
    public override string ParameterName
    {
       get { return _name; }
       set { _name = value; }
    }
    //...
}
Run Code Online (Sandbox Code Playgroud)

图书馆1.0(运行)

public sealed class MyDbParameter : MarshalByRefObject, IDbDataParameter, IDataParameter
{
    public string ParameterName
    {
        get { return _name; }
        set { _name = value; }
    }
    //...
}
Run Code Online (Sandbox Code Playgroud)

查看调用代码的MSIL,我想通过基类的MetodTable解析虚拟调用:

IL_0001: newobj instance void [Library]Library.MyDbParameter::.ctor() …
Run Code Online (Sandbox Code Playgroud)

.net c# polymorphism

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

Oracle客户端与基于任务的异步模式(异步/等待)

我想编写一系列以异步/等待方式查询Oracle数据库的方法.由于ODP.NET似乎既不支持等待的*Async方法也不支持Begin/EndOperationName对,我有哪些选项可以手动实现?

到目前为止,我所看到的I/O密集型异步方法的所有示例都只调用.NET库中的其他异步方法,但内部完成上下文切换的方式没有任何亮点.文档说在这些情况下没有使用单独的线程,并且多线程开销显然仅适用于CPU密集型操作.所以我猜使用Task.Run()不是一个选项,或者我错了?

.net c# oracle task-parallel-library async-await

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

在perfmon中缺少ODP.NET托管驱动程序性能计数器

如何在perfom中启用ODP.NET托管驱动程序的性能计数器以便能够监视它们?目前我根本无法在perfmon中看到"Oracle Data Provider for .NET"类别.

我试图在配置脚本中注册xcopy安装包(ODP.NET_Managed121010.zip)中的计数器,但相关部分以错误结束:

OraProvCfg/action:register/product:odpm/component:perfcounter /providerpath:"D:\svnroot\tech\Nasadzovanie\Assemblies\Oracle.ManagedDataAccess\tmp\odp.net\managed\x64\..common\Oracle.ManagedDataAccess .dll"错误:注册ODP计数器时遇到问题

我的app.config的相关部分是正确的我希望:

<configSections>
  <section name="oracle.manageddataaccess.client"
           type="OracleInternal.Common.ODPMSectionHandler,
                 Oracle.ManagedDataAccess, Version=4.121.1.0,
                 Culture=neutral, PublicKeyToken=89b483f429c47342" />
</configSections>
<oracle.manageddataaccess.client>
  <version number="*">
    <settings>
      <setting name="PerformanceCounters" value="4095" />
    </settings> 
  </version>
</oracle.manageddataaccess.client>
Run Code Online (Sandbox Code Playgroud)

odp.net performancecounter odp.net-managed

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

启动ASP.NET 5 RC1应用程序时,IIS Express + HttpPlatformHandler崩溃

从ASP.NET 5 beta 7升级到RC1后,尝试从Visual Studio中启动IIS Express中的Web应用程序,结果为"尝试确定托管应用程序的DNX进程的进程ID时出错".

在Windows事件日志中,我可以看到以下错误:

  • 流程'1828'未能启动.端口= 31115,错误代码=' - 2147024891'.(EventID 1000;总是发生这种情况)
  • 警告:无法创建stdoutLogFile \?\ C:_temp_httpplatform-stdout.log_6072_2015128124832.log,ErrorCode = -2147024864.(EventID 1004;有时只会发生这种情况)

HttpPlatformHandler配置中配置的日志文件确实已创建但完全为空,以及VS Output窗口.

如何诊断失败的原因?

相关版本是:

  • Visual Studio Enterprise 2015 Update 1
  • DNX SDK版本:1.0.0-rc1-update1
  • Windows 7企业版SP1(64位)

来自web.config的相关部分:

<system.webServer>
  <handlers>
    <add name="httpPlatformHandler" path="*" verb="*" modules="httpPlatformHandler" resourceType="Unspecified" />
  </handlers>
  <httpPlatform processPath="%DNX_PATH%" 
                arguments="%DNX_ARGS%" 
                stdoutLogEnabled="true" 
                stdoutLogFile="C:\_temp\_httpplatform-stdout.log"
                startupTimeLimit="3600" 
                forwardWindowsAuthToken="false" />
</system.webServer>
Run Code Online (Sandbox Code Playgroud)

也许有趣的是,最初当我尝试运行从模板创建的全新ASP.NET 5 Web应用程序时,它起作用了.现在它也没有.

更新:尽管IIS Express启动时出错,但返回502.3 Bad Gateway错误

.net iis-express asp.net-core

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

在DelegatingHandler中设置WWW-Authenticate响应头会对w2k3造成严重破坏

我通过发送会话令牌使用自定义身份验证机制.在DelegatingHandler中检查令牌的存在,DelegatingHandler根据情况设置当前主体.如果主体未被授权调用ApiController方法,则控制器发送401 Unauthorized状态.由于RFC 2616需要在发送401响应时始终设置WWW-Authenticate标头,因此我的DelegatingHandler负责处理此问题.

现在,在Web API自托管的情况下,应该响应的请求可以在Windows 7上正常运行,但在Windows Server 2003上,它会因"远程主机强行关闭现有连接"而死亡.此外,我注意到控制器方法中的断点在W2k3上被击中两次,而在Win7中被击中一次,好像HttpClient在收到401响应时以某种方式重试了请求.

当我使用WWW-Authenticate标头取消注释该行时,该程序正常工作.请参阅下面的代码示例,以获取控制台应用程序中的简约再现示例.

TestController.cs:

public class TestController : ApiController
{
    public HttpResponseMessage Get()
    {
        return Request.CreateErrorResponse(HttpStatusCode.Unauthorized, "go away");
    }
}
Run Code Online (Sandbox Code Playgroud)

AuthenticationHandler.cs:

public class AuthenticationHandler : DelegatingHandler
{
    protected override Task<HttpResponseMessage> SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)
    {
        return base.SendAsync(request, cancellationToken).ContinueWith<HttpResponseMessage>(task =>
        {
            HttpResponseMessage response = task.Result;
            if ( response.StatusCode == HttpStatusCode.Unauthorized &&
                 !response.Headers.Contains("WWW-Authenticate") )
            {
                // comment out this line and the code works
                response.Headers.Add("WWW-Authenticate", "SessionToken");
            }
            return response;
        });
    }
}
Run Code Online (Sandbox Code Playgroud)

Program.cs中:

    static void Main(string[] …
Run Code Online (Sandbox Code Playgroud)

.net asp.net-web-api

6
推荐指数
1
解决办法
1951
查看次数

默认情况下如何拒绝Web API项目的授权

除非明确允许授权,否则是否可以拒绝项目中每个ASP.NET Web API控制器的授权(即使对于经过身份验证的用户)?

我正在寻找类似的东西:

WebApiConfig

config.Filters.Add(new DenyAuthorizationAttribute());   // ??
Run Code Online (Sandbox Code Playgroud)

ExampleController.cs

public class ExampleController : ApiController
{
    [Authorize(Roles = "Admins")]
    public string GetHello_OnlyAdmins()
    {
        // only admins can call this
    }

    [AllowAnonymous]
    public void PostSomething_Everybody()
    {
        // ...
    }

    public void DeleteSomething_NoOne()        
    {
        // nobody can call this - we want to force the programmer to be specific about authorized roles
    }

}
Run Code Online (Sandbox Code Playgroud)

.net asp.net-web-api

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

如何从另一个项目引用 ASP.NET 5 项目?

我有一个从 VS2015 中的 ASP.NET 5 预览模板创建的 Web 应用程序项目。它在 dnx 1.0.0-beta7 上运行,但我使用完整的 .NET 框架而不是 .NET Core。

在同一解决方案中,我有一个 NUnit 类库项目,但是当尝试在此处添加 Web 项目作为引用时,Visual Studio 提示“无法添加对‘...’的引用。”

有解决方法吗?或者单元测试 ASP.NET vNext 应用程序的首选方法是什么?

.net visual-studio-2015 dnx asp.net-core

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