i'm working on an c# project that send a xml to a server and receives a xml as response.
With .Net Framework 4.0 installed that works fine.
With .Net Framework 4.5 installed it throws this 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()`
I use the method BeginGetResponse
and all parameters there are not null.
Does anybody know what's wrong?
Why does it work with 4.0 but not with 4.5?
Did i forget something to set up?
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
In my Config File i use mostly the appsettings for individual settings. Like:<add key="DATABASE_CONNECTION" value="FIREBIRD"/>
The HttpWebRequest class provides support for the properties and methods defined in WebRequest and for additional properties and methods that enable the user to interact directly with servers using HTTP.
WebRequest is an abstract class. The HttpWebRequest class allows you to programmatically make web requests to the HTTP server.
WebRequest, WebClient, and ServicePoint are obsolete.
To be honest as you are now targeting .NET 4.5 I would have a look into using HttpClient
instead of HttpWebRequest.
HttpClient
Strange there wasn't a serious answer posted already...
HttpWebRequest has been made obsolete in .NET 4.5 and later versions so it will not compile which is noted on the msdn site
This is why Jammer is saying to use HttpClient as a replacement since it seems to be the replacement microsoft has made for it.
Looks like it will be an effort to change your code but I'd say it's all for the best
I had the same strange problem in IdnEquivalent. The problem persisted when I had Fiddler web debugger launched during my debug session. After I shut it down the problem disappeared.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With