给出包含两个网站的解决方案:
1)基于.NET 4.61的ASP.NET
2).NET Core RC2
启动iisexpress for(2)后,MSVS更新applicationhost.config以包含一些看似与(1)不兼容的额外行.直到iisexpress首次关闭然后尝试启动(1)才会注意到这一点.
不兼容的行是:
<section name="aspNetCore" overrideModeDefault="Allow" />
<add name="AspNetCoreModule" image="C:\Program Files (x86)\Microsoft Web Tools\AspNetCoreModule\aspnetcore.dll" />
<add name="AspNetCoreModule" />
Run Code Online (Sandbox Code Playgroud)
启动(1)时,会出现一个对话框,指出"IISExpress无法启动"并写入一个事件:
由于配置问题,无法加载模块DLL"C:\ Program Files(x86)\ Microsoft Web Tools\AspNetCoreModule\aspnetcore.dll".当前配置仅支持加载为AMD64处理器体系结构构建的映像.数据字段包含错误编号.要了解有关此问题的详细信息,包括如何解决此类处理器体系结构不匹配错误,请参阅http://go.microsoft.com/fwlink/?LinkId=29349.
可能的解决方案?
A)在启动之前删除多余的行(1),如何自动实现?
B)为每个网站使用不同的applicationhost.config,是否有环境变量来设置它?
C)直接修复事件日志中报告的问题.不知何故,它在启动.NET Core RC2站点时起作用,这很奇怪.
D)使用恰好位于不同目录中的单独解决方案文件.这是不可取的,因为它是一个相当复杂的解决方案.
建立:
1)MSVS 2015,选项 - >调试器 - >"仅我的代码"被选中.
2)此示例代码放在某个类中并在启动期间调用:
static bool TestIgnoreException()
{
Exception ex;
return TrySomething(out ex);
}
[DebuggerNonUserCode] // Prevent exceptions from stopping the debugger within this method.
static bool TrySomething(out Exception exOut)
{
try
{
if (Environment. MachineName.Length != -1)
throw new Exception("ThrewIt.");
exOut = null;
return true;
}
catch (Exception ex)
{
exOut = ex;
return false;
}
}
Run Code Online (Sandbox Code Playgroud)
3)启动调试器
预期的结果是TestIgnoreException()以静默方式运行并返回false.
实际结果是调试器在TestIgnoreException()中停止,即使在该范围内不应该处理异常.
4)也使用[DebuggerHidden]重新尝试,结果相同.
动机:
动机是针对某些不受您控制的API不提供"尝试"方法而仅通过使用异常指示失败的情况.
众多此类示例中的一个是.NET TcpClient.Connect(主机,端口).假设一个程序总是在启动期间测试一些连接,调试器不应该每次都停在这个特定的代码段上.
使用标准的"抛出时中断"异常复选框并不好,因为它按类型全局工作.它无法配置为在本地工作.检查代码的其他开发人员也应该自动跳过异常.
我刚刚在NDC观看了Bob Martin的一集,他说在页面顶部的C#中使用"using"指令很糟糕,因为它们在组件之间创建/暗示紧密耦合.
在没有添加项目引用和using语句的情况下,有什么方法可以使用外部.dll?
我记得V6曾经让你通过ProgId的字符串创建一个对象 - 我不确定这是我正在寻找的技术,但它是一个不需要项目引用的语言示例DLL.
编辑:这是会议的链接.对不起我在演讲中没有确切的引用或分钟,我记得.
我有兴趣在WCF REST服务客户端中正确处理故障.在使用任何WebClient,WebRequest或HttpWebRequest时,如下所示:
try
{
HttpWebRequest req = (HttpWebRequest)HttpWebRequest.Create(uri);
req.Method = "GET";
HttpWebResponse resp = (HttpWebResponse)req.GetResponse();
// ...process...
}
catch (WebException wex)
{
string exMessage = wex.Message;
if (wex.Response != null)
{
using (StreamReader r = new StreamReader(wex.Response.GetResponseStream()))
exMessage = r.ReadToEnd();
// the fault xml is available here, really need to parse? and how?
}
}
Run Code Online (Sandbox Code Playgroud)
我可以在Fiddler中看到我收到格式良好的XML"Fault"消息(默认是因为includeExceptionDetailInFaults = true,或者是通过IErrorHandler :: ProvideFault的自定义错误).但是,仅抛出500个内部错误WebException.
我宁愿在客户端上抛出一个FaultException,或者至少能够解析Fault.我们没有使用"服务参考",因此没有代理(如果有更好的方法为REST WCF客户端执行此操作,请更正我).是否有一种通用的方法来解析该错误,无论其实际类型为T(FaultException),还是将特定类型作为起点?谢谢!
根据degorolls的回答:
public SomeContract ThrowErrorTest()
{
try
{
return TryCatchExtractAndRethrowFaults<SomeContract>(() =>
{
// Call web service using WebClient, HttpWebRequest, …Run Code Online (Sandbox Code Playgroud) 安装新的SQL Server 2012实例后,我希望将数据库文件移动到单独的驱动器.当我在目标位置执行文件 - >属性,然后单击安全 - >编辑 - >添加 - >高级,选择位置=机器名,然后单击查找,我只看到与分析服务相关的表单:
SQLServerMSASUser$MachineName$InstanceName
Run Code Online (Sandbox Code Playgroud)
我认为我真正需要的权限是我能看到的那个存在于默认的C:驱动器位置:
MSSQL$InstanceName
Run Code Online (Sandbox Code Playgroud)
当我试图直接输入它时,它是无法识别的.如果我将目录设置为"Everyone",然后将数据库移动到那里(使用恢复),它将工作并在mdf文件上显示上述权限.当父目录未显示为列表中的可用条目时,如何在父目录上设置该权限.谢谢!
在 WCF (System.Net.WebHeaderCollection) 中,可以使用 System.Net.HttpRequestHeader 枚举或标头字符串检索标头值:
WebOperationContext.Current.IncomingRequest.Headers[httpRequestHeaderEnum]
// or
WebOperationContext.Current.IncomingRequest.Headers.Get(rawHeaderString)
Run Code Online (Sandbox Code Playgroud)
但在 ASP.NET 中,标头位于仅接受标头字符串的 NameValueCollection 中:
HttpContext.Current.Request.Headers[rawHeaderString]
Run Code Online (Sandbox Code Playgroud)
为了将枚举用于 ASP.NET,从枚举 System.Net.HttpRequestHeader 到其标头字符串的映射在哪里?
我们正在测试4进程WCF IIS应用程序(x3发行版本)的内存稳定性(泄漏),只需每隔1秒ping一次,就像Load Balancer一样.如果服务器上没有运行其他任何东西,它运行正常> 12小时.
但是,如果我们故意减少总可用内存(修复页面,减少物理内存,启动其他应用程序)并将物理内存使用率提高到97%并将其保留5分钟或更长时间,Windows通常会检测到这种情况并关闭一个的过程.请注意,如果将总内存推至97%(使用固定页面文件),它也会失败.
但是,使用RedGate工具分析其中一个幸存进程的内存占用情况,可以看出:

由于请求只是稳定的ping,因此当服务器缺乏时,.NET似乎没有实际的理由来保存269MB的可用内存.大约50%的IIS进程似乎处于此状态(~1.8GB).
该应用程序是针对.NET 4.0编译的,gcServer为true.IIS Gate检查设置为0%(minFreeMemoryPercentageToActivateService ="0"),尽管我们可能会将其设置为2%.
服务器是2008 R2,~4GB物理4GB固定页面,用4.0然后再测试4.5.1(无所谓).
"一旦物理内存不足,.NET将把它的堆释放回操作系统."
任何人都知道该索赔的任何参考?它可能是特定版本的吗?
参考文献:
对于下面的情况,当工作线程之间没有写入竞争时,仍然需要锁或易失性?如果"G"不需要"Peek"访问,则答案有任何差异.
class A
{
Object _o; // need volatile (position A)?
Int _i; // need volatile (position B)?
Method()
{
Object o;
Int i;
Task [] task = new Task[2]
{
Task.Factory.StartNew(() => {
_o = f1(); // use lock() (position C)?
o = f2(); // use lock() (position D)?
}
Task.Factory.StartNew(() => {
_i = g1(); // use lock() (position E)?
i = g2(); // use lock() (position F)?
}
}
// "Peek" at _o, _i, o, i (position …Run Code Online (Sandbox Code Playgroud) c# ×4
asp.net ×2
exception ×2
wcf ×2
asp.net-core ×1
attributes ×1
c#-4.0 ×1
client ×1
coupling ×1
debugging ×1
decoupling ×1
fault ×1
http-headers ×1
iis ×1
iis-express ×1
locking ×1
rest ×1
task ×1
variables ×1
volatile ×1