1

在我们在单声道上运行的 ASP MVC 应用程序上,我们有时会在创建 WebRequests 时得到这个 NotSupportedException: http。这是堆栈跟踪:

979: Message: System.NotSupportedException: http
980:  at System.Net.WebRequest.GetCreator (System.String prefix) [0x00000] in <filename unknown>:0 
981:  at System.Net.WebRequest.CreateDefault (System.Uri requestUri) [0x00000] in <filename unknown>:0 


Version Information: 3.0.12 (master/b39c829 Tue Jun 18 11:23:32 CEST 2013); ASP.NET Version: 4.0.30319.17020

https://github.com/mono/mono/blob/master/mcs/class/System/System.Net/WebRequest.cs#L479

有时它起作用,有时它不起作用。我不知道为什么。有没有人解决这个问题?

4

2 回答 2

2

这是我用来在我们的应用程序中解决此问题的 hack:

private static HttpWebRequest CreateWebRequest(Uri uri)
    {
        //Webrequest creation does fail on MONO randomly when using WebRequest.Create
        //the issue occurs in the GetCreator method here: http://www.oschina.net/code/explore/mono-2.8.1/mcs/class/System/System.Net/WebRequest.cs

        var type = Type.GetType("System.Net.HttpRequestCreator, System, Version=4.0.0.0,Culture=neutral, PublicKeyToken=b77a5c561934e089");
        var creator = Activator.CreateInstance(type,nonPublic:true) as IWebRequestCreate;
        return creator.Create(uri) as HttpWebRequest;
    }
于 2013-08-01T14:56:58.933 回答
2

我在 Mono 2.10 的一些早期版本中看到了这一点(实际上是几年前),并帮助追踪了它(但我已经有一段时间没有看到它了)。

如果我的记忆没有让我失望,那是 ASP.Net 的启动路径中的竞争条件或 ASP.Net 使用的同步原语中的错误。

追踪它相当棘手,它只发生在生产服务器上(当然)而且只是偶尔发生。

就我而言,它仅在 ASP.Net 重新启动后发生。我有机器人定期连接到服务器,如果服务器已经关闭了一段时间,一旦服务器恢复,就会有许多机器人焦急地冲击服务器,显然使竞争条件更容易触发。

为了缩小范围,我从源代码构建了 Mono 并添加了 Console.WriteLine 语句。过了一段时间(实际上是几周,因为我添加的 Console.WriteLines 越多,重现起来就越困难),找到了罪魁祸首。不幸的是,我不记得到底是什么问题,也没有解决方法。

希望这将帮助您追踪它。

于 2013-07-24T12:34:08.760 回答