HttpWebRequest en c# ne fonctionne pas avec .net 4.5

je suis en train de travailler sur un projet c# que d'envoyer un fichier xml sur un serveur et reçoit un xml comme réponse.

Avec .Net Framework 4.0 est installé, ce qui fonctionne parfaitement.

Avec .Net Framework 4.5 est installé, il jette cette Exception:

System.NullReferenceException: Der Objektverweis wurde nicht auf eine Objektinstanz festgelegt.  
bei System.DomainNameHelper.IdnEquivalent(String hostname)  
bei System.Uri.get_IdnHost()  
bei System.Net.HttpWebRequest.GetSafeHostAndPort(Uri sourceUri, Boolean addDefaultPort, Boolean forcePunycode)  
bei System.Net.HttpWebRequest.GenerateProxyRequestLine(Int32 headersSize)  
bei System.Net.HttpWebRequest.SerializeHeaders()  
bei System.Net.HttpWebRequest.EndSubmitRequest()  
bei System.Net.HttpWebRequest.CheckDeferredCallDone(ConnectStream stream)  
bei System.Net.HttpWebRequest.BeginGetResponse(AsyncCallback callback, Object state)  
bei Fahrzeugverwaltungsserver.OutsideWorld.MAN_Integrationsserver.RawCommunication.ISServer.doPostAndGet()`  

J'utilise la méthode BeginGetResponse et de tous les paramètres, il n'y a pas la valeur null.

Quelqu'un sait quel est le problème?

Pourquoi faut-il travailler avec 4.0, mais pas avec 4.5?

Ai-je oublié quelque chose à configurer?

Edit 1

private void doPostAndGet()
{
try
{
//caching  
inform(SystemIcons.Information, Translations.ISServer_postAndGet_0);  
Trace.TraceInformation("OUT:\n" + Beautify(InputXML));  
string c = cache.Get(InputXML.OuterXml);
if (c != null)
{
XmlDocument docl = new XmlDocument();
docl.LoadXml(c);
inform(SystemIcons.Information, Translations.ISServer_postAndGet_1);
printInDocument(docl, "Aus Cache.");
this.doc = docl;
}
//Read access information:
UriBuilder urib = new UriBuilder("http", MANHaendlerdaten.IS_host, 9005, MANHaendlerdaten.IS_path);
urib.UserName = MANHaendlerdaten.IS_user;
urib.Password = MANHaendlerdaten.IS_password;
String proxyUser = MANHaendlerdaten.IS_proxy_user;
String proxyPassword = MANHaendlerdaten.IS_proxy_password;
//create credentials for request's header:
var proxy =
Convert.ToBase64String(
Encoding.UTF8.GetBytes(proxyUser + ":" + proxyPassword));
var user =
Convert.ToBase64String(
Encoding.UTF8.GetBytes(urib.UserName + ":" + urib.Password));
//set proxy when needed:
try
{
WebRequest.DefaultWebProxy = new WebProxy(MANHaendlerdaten.IS_proxy_ip, MANHaendlerdaten.IS_proxy_port);
if (WebRequest.DefaultWebProxy == null)
Trace.WriteLine(String.Format("WebRequest.DefaultWebProxy ist null. {0}, {1}", MANHaendlerdaten.IS_proxy_ip, MANHaendlerdaten.IS_proxy_port));
}
catch (Exception e)
{
Trace.TraceError("1\n" + e.ToString());
Debug.WriteLine(Translations.ISServer_postAndGet_3);
WebRequest.DefaultWebProxy = null; //speed up further request by avoiding proxy-auto-detect
//pass when no proxy specified
}
//System.Net.ServicePointManager.Expect100Continue = false //this is a nasty one if not set to false            
client = (HttpWebRequest)WebRequest.Create(urib.Uri);
//Encodings:
client.Headers.Add("Accept-Encoding", "deflate");
client.ContentType = "text/xml; charset=UTF-8";
client.Accept = "text/xml; charset=UTF-8";
client.Headers.Add("SOAPAction", "\"\"");
//Authentification:        
client.Headers.Add("Proxy-Authorization", "Basic " + proxy);
client.Headers.Add("Authorization", "Basic " + user);
//Connection and Protocol:
client.Host = urib.Host;
client.UserAgent = Translations.FullServiceName;
client.ProtocolVersion = HttpVersion.Version10;
client.KeepAlive = true;
client.Method = WebRequestMethods.Http.Post;
client.Timeout = 60000;
client.Proxy = new WebProxy(MANHaendlerdaten.IS_proxy_ip, MANHaendlerdaten.IS_proxy_port);
if (client.Proxy == null)
Trace.WriteLine(String.Format("client.Proxy ist null. {0}, {1}", MANHaendlerdaten.IS_proxy_ip, MANHaendlerdaten.IS_proxy_port));
client.ReadWriteTimeout = 60000;
//accept cookies within this ISServer-instance
if (this.cookieCont == null)
{
this.cookieCont = new CookieContainer();
}
client.CookieContainer = cookieCont;
inform(SystemIcons.Information, Translations.ISServer_postAndGet_7);
//Post request:
using (Stream to_request = client.GetRequestStream())
{
InputXML.Save(to_request);
to_request.Flush();
}
RequestState myRequestState = new RequestState();
myRequestState.request = client;
webrequestresponse = false;
IAsyncResult asyncResult = client.BeginGetResponse(new AsyncCallback(FinishWebRequest), myRequestState);
while (webrequestresponse == false)
{
Thread.Sleep(100);
}
}
catch (Exception e)
{
Trace.TraceError(e.ToString());
throw e;
}
}  

Edit 2

Dans mon Fichier de Config j'utilise principalement le appsettings pour les réglages individuels. Comme:

<add key="DATABASE_CONNECTION" value="FIREBIRD"/>

Pouvez-vous nous montrer ton code?
Pouvez-vous nous montrer votre .Fichier de Config?
Pas sûr de savoir comment cela fonctionnait .net 4. Pouvez-vous essayer à l'aide de GetResponse() au lieu de BeginGetRespone?
Vous avez un NullReferenceException à System.DomainNameHelper.IdnEquivalent(String hostname). Voir aussi Comment faire HttpClient trafic de relais apparaître dans Fidder ou Charles?. Cela se produit dès que vous mettez à jour .NET 4 .NET 4.5, ou est-il une autre machine qui a un proxy?
Il arrive quand je l'ai mise à jour de la .Net Framework sur le PC sur lequel mon programme s'exécute. Lorsque la version 4.0 est installé, il fonctionne très bien.

OriginalL'auteur user2621742 | 2013-08-13