我在库类上调用属性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) 我想编写一系列以异步/等待方式查询Oracle数据库的方法.由于ODP.NET似乎既不支持等待的*Async方法也不支持Begin/EndOperationName对,我有哪些选项可以手动实现?
到目前为止,我所看到的I/O密集型异步方法的所有示例都只调用.NET库中的其他异步方法,但内部完成上下文切换的方式没有任何亮点.文档说在这些情况下没有使用单独的线程,并且多线程开销显然仅适用于CPU密集型操作.所以我猜使用Task.Run()不是一个选项,或者我错了?
如何在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) 从ASP.NET 5 beta 7升级到RC1后,尝试从Visual Studio中启动IIS Express中的Web应用程序,结果为"尝试确定托管应用程序的DNX进程的进程ID时出错".
在Windows事件日志中,我可以看到以下错误:
HttpPlatformHandler配置中配置的日志文件确实已创建但完全为空,以及VS Output窗口.
如何诊断失败的原因?
相关版本是:
来自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错误
我通过发送会话令牌使用自定义身份验证机制.在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) 除非明确允许授权,否则是否可以拒绝项目中每个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) 我有一个从 VS2015 中的 ASP.NET 5 预览模板创建的 Web 应用程序项目。它在 dnx 1.0.0-beta7 上运行,但我使用完整的 .NET 框架而不是 .NET Core。
在同一解决方案中,我有一个 NUnit 类库项目,但是当尝试在此处添加 Web 项目作为引用时,Visual Studio 提示“无法添加对‘...’的引用。”
有解决方法吗?或者单元测试 ASP.NET vNext 应用程序的首选方法是什么?
.net ×6
asp.net-core ×2
c# ×2
async-await ×1
dnx ×1
iis-express ×1
odp.net ×1
oracle ×1
polymorphism ×1