Lors de l'écriture de données sur un serveur Web, mes tests montrent HttpWebRequest.ReadWriteTimeout est ignoré, contrairement à MSDN spec. Par exemple, si je mets ReadWriteTimeout à 1 (= 1 msec), appelez myRequestStream.Write() en passant dans un tampon qui prend 10 secondes à transférer, il transfère avec succès et ne expire jamais en utilisant .NET 3.5 SP1. Le même test fonctionnant sur Mono 2.6 fois immédiatement comme prévu. Quel pourrait être le problème?HttpWebRequest ReadWriteTimeout ignoré dans .NET; fonctionne dans Mono
Répondre
Il semble y avoir un bug où le timeout d'écriture, lorsqu'il est défini sur l'instance de Stream retournée par BeginGetRequestStream(), n'est pas propagé vers le socket natif. Je vais déposer un bug pour m'assurer que ce problème est corrigé pour une prochaine version du .NET Framework.
Voici une solution de contournement.
private static void SetRequestStreamWriteTimeout(Stream requestStream, int timeout)
{
// Work around a framework bug where the request stream write timeout doesn't make it
// to the socket. The "m_Chunked" field indicates we are performing chunked reads. Since
// this stream is being used for writes, the value of this field is irrelevant except
// that setting it to true causes the Eof property on the ConnectStream object to evaluate
// to false. The code responsible for setting the socket option short-circuits when it
// sees Eof is true, and does not set the flag. If Eof is false, the write timeout
// propagates to the native socket correctly.
if (!s_requestStreamWriteTimeoutWorkaroundFailed)
{
try
{
Type connectStreamType = requestStream.GetType();
FieldInfo fieldInfo = connectStreamType.GetField("m_Chunked", BindingFlags.NonPublic | BindingFlags.Instance);
fieldInfo.SetValue(requestStream, true);
}
catch (Exception)
{
s_requestStreamWriteTimeoutWorkaroundFailed = true;
}
}
requestStream.WriteTimeout = timeout;
}
private static bool s_requestStreamWriteTimeoutWorkaroundFailed;
Merci beaucoup! Je vais essayer la solution de contournement. On dirait que le correctif sera compatible même après un bug dans le framework .NET est corrigé? – jimvfr
Testé la solution de contournement; ça fonctionne bien. Pouvez-vous me dire le numéro de bogue de Microsoft à ce sujet? – jimvfr
- 1. Installer référence d'assemblage .Net dans Mono
- 2. HttpWebRequest et SSL dans .NET CF 3.5
- 3. Je classe au sujet HttpWebRequest dans .net
- 4. Mono: HttpWebRequest Erreurs SSL sur URI non-SSL
- 5. Où est le cacao-net dans Mono
- 6. mod_rewrite ignoré/ne fonctionne pas
- 7. erreur Mono .NET 500
- 8. .NET HttpWebRequest HTTPS erreur
- 9. maxPageStateFieldLength ignoré dans web.config
- 10. .NET/Mono Install Base
- 11. Réflecteur .NET pour Mono
- 12. HttpWebRequest timeout dans 3.5sp1
- 13. HttpWebRequest dans .NET - Connexion à une page Web
- 14. .Net HttpWebRequest/Réponse Cocoa Equivelant
- 15. HttpWebRequest ne fonctionne pas dans une page web
- 16. Blackberry - getPreferredWidth ignoré dans 4.5?
- 17. MEF sur Mono ne fonctionne pas correctement?
- 18. Mono MVC 2 route ne fonctionne pas
- 19. DllImport ne fonctionne pas comme annoncé dans Mono (Linux, C#)
- 20. Différences portables .Net et MONO
- 21. Mono GetText sur .NET 3.5
- 22. Comment décoder wav, mp3, et/ou ogg dans .Net/Mono?
- 23. Quelles fonctions .NET devraient être mieux supportées dans Mono?
- 24. Comment fonctionne BasePage.GeneratePassword dans .net?
- 25. Prise en charge du proxy .NET - HTTPWebRequest
- 26. Mono WCF InstanceContextMode ne fonctionne pas
- 27. Traitement de l'authentification avec HttpWebRequest (.NET)
- 28. Comment intégrer flash dans Mono?
- 29. Timeout avec HttpWebResponse dans .NET
- 30. GetProperty fonctionne dans .NET 3.5, mais pas dans .NET 4
Vos tests avec .NET et mono sont-ils effectués sur le même serveur et sur le même hôte? – feroze
Même serveur, pas le même hôte. – jimvfr