我有以下代码:
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
request.Method = "HEAD";
request.Credentials = MyCredentialCache;
try
{
request.GetResponse();
}
catch
{
}
Run Code Online (Sandbox Code Playgroud)
如何捕获特定的404错误?WebExceptionStatus.ProtocolError只能检测到发生了错误,但未提供错误的确切代码.
例如:
catch (WebException ex)
{
if (ex.Status != WebExceptionStatus.ProtocolError)
{
throw ex;
}
}
Run Code Online (Sandbox Code Playgroud)
只是没用得多......协议异常可能是401,503,403,真的是什么.
.net c# error-handling exception-handling http-status-code-404
我在IIS中有一个网站,我无法打开任何设置,如身份验证,处理程序映射,授权规则等.它只显示错误消息"执行此操作时出错",没有更多详细信息和指向Web的.config.
浏览网站会导致500.19错误.
我尝试添加iis_iusrs到网站文件夹和web.config,更改应用程序池标识,允许访问web.config /网站文件夹安全设置,验证目标框架,iisreset/app池回收无效.
这是我的代码:
int size = 100000000;
double sizeInMegabytes = (size * 8.0) / 1024.0 / 1024.0; //762 mb
double[] randomNumbers = new double[size];
Run Code Online (Sandbox Code Playgroud)
例外:抛出了类型'System.OutOfMemoryException'的异常.
我在这台机器上有4GB内存当我开始运行时,2.5GB是免费的,PC上有足够的空间来处理762mb的100000000随机数.我需要在给定可用内存的情况下尽可能多地存储随机数.当我去生产时,盒子上将有12GB,我想要使用它.
CLR是否将我限制为默认的最大内存?以及如何申请更多?
更新
我认为将其分解为更小的块并逐渐增加我的内存需求将有助于如果问题是由于内存碎片,但它不会无法超过256mb的总ArrayList大小,无论我做什么调整blockSize.
private static IRandomGenerator rnd = new MersenneTwister();
private static IDistribution dist = new DiscreteNormalDistribution(1048576);
private static List<double> ndRandomNumbers = new List<double>();
private static void AddNDRandomNumbers(int numberOfRandomNumbers) {
for (int i = 0; i < numberOfRandomNumbers; i++) {
ndRandomNumbers.Add(dist.ICDF(rnd.nextUniform()));
}
}
Run Code Online (Sandbox Code Playgroud)
从我的主要方法:
int blockSize = 1000000;
while …Run Code Online (Sandbox Code Playgroud) 我想知道'theObject'是否是枚举(任何枚举类型)
foreach (var item in Enum.GetValues(theObject.GetType())) {
//do something
}
Run Code Online (Sandbox Code Playgroud) 是否可以通过某种属性将字符串序列化为使用.Net XmlSerializer的CDATA?
有没有人已经在Windows环境中实现memcached用于生产?因为我读过很多博客,所以不建议在Windows中运行memcached,尤其是生产用途,例如在windows上运行memcached.
还有一件事,哪个memcached客户端很适合用c#和.net 3.5?我找到了许多替代品,如Memcached Providers @ Codeplex,Beitmemcached和memcached provider @ Sourceforge
在C#中,如何从给定数组中获取通用枚举器?
在下面的代码中,MyArray是一个MyType对象数组.我想以MyIEnumerator所示的方式获得,但似乎我获得了一个空的调查员(尽管我已经证实了这一点MyArray.Length > 0).
MyType [ ] MyArray = ... ;
IEnumerator<MyType> MyIEnumerator
= ( MyArray.GetEnumerator() as IEnumerator<MyType> ) ;
Run Code Online (Sandbox Code Playgroud) 我有一个列表Uri,我想要"点击"为了达到这个目的,我试图为每个Uri创建一个新的Web浏览器控件.我为每个Uri创建一个新线程.我遇到的问题是文档在文档之前结束是完全加载的,所以我永远不会使用DocumentComplete事件.我怎么能克服这个?
var item = new ParameterizedThreadStart(ClicIt.Click);
var thread = new Thread(item) {Name = "ClickThread"};
thread.Start(uriItem);
public static void Click(object o)
{
var url = ((UriItem)o);
Console.WriteLine(@"Clicking: " + url.Link);
var clicker = new WebBrowser { ScriptErrorsSuppressed = true };
clicker.DocumentCompleted += BrowseComplete;
if (String.IsNullOrEmpty(url.Link)) return;
if (url.Link.Equals("about:blank")) return;
if (!url.Link.StartsWith("http://") && !url.Link.StartsWith("https://"))
url.Link = "http://" + url.Link;
clicker.Navigate(url.Link);
}
Run Code Online (Sandbox Code Playgroud) 在ASP.Net应用程序中,用户单击网页上的按钮,然后通过事件处理程序在服务器上实例化对象,并调用该对象上的方法.该方法转到外部系统来做东西,这可能需要一段时间.所以,我想要做的是在另一个线程中运行该方法调用,以便我可以通过"您的请求已经提交"将控制权返回给用户.我很乐意这样做,虽然用户可以继续轮询对象的状态,但它会更好.
我不知道的是,即使用户会话过期,IIS是否允许我的线程继续运行.想象一下,用户触发事件并在服务器上实例化对象并在新线程中触发该方法.用户对"您的请求已提交"消息感到满意并关闭其浏览器.最终,此用户会话将在IIS上超时,但该线程可能仍在运行,正在运行.IIS会允许线程继续运行还是会在用户会话到期后将其终止并处理掉对象?
编辑:从答案和评论,我知道这样做的最好方法是将长时间运行的处理移到IIS之外.除了其他一切,这涉及appdomain回收问题.在实践中,我需要在有限的时间内完成版本1并且必须在现有框架内工作,因此希望避免服务层,因此希望在IIS内部启动线程.实际上,这里的"长时间运行"只需几分钟,网站上的并发性很低,所以应该没问题.但是,下一个版本肯定需要拆分成一个单独的服务层.