HttpWebRequest w c # nie działa z .net 4.5
Pracuję nad projektem c #, który wysyła xml na serwer i odbiera xml jako odpowiedź.
Z zainstalowanym .Net Framework 4.0 działa dobrze.
Po zainstalowaniu .Net Framework 4.5 powoduje wyjątek:
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()`
Używam tej metodyBeginGetResponse
a wszystkie parametry nie są zerowe.
Czy ktoś wie, co się stało?
Dlaczego działa z 4.0, ale nie z 4.5?
Czy zapomniałem coś skonfigurować?
Edytuj 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;
}
}
Edytuj 2
W moim pliku konfiguracyjnym używam głównie ustawień aplikacji dla indywidualnych ustawień. Lubić:<add key="DATABASE_CONNECTION" value="FIREBIRD"/>