本文整理汇总了C#中System.Net.WebConnectionData类的典型用法代码示例。如果您正苦于以下问题:C# WebConnectionData类的具体用法?C# WebConnectionData怎么用?C# WebConnectionData使用的例子?那么恭喜您, 这里精选的类代码示例或许可以为您提供帮助。
WebConnectionData类属于System.Net命名空间,在下文中一共展示了WebConnectionData类的13个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。
示例1: WebConnectionStream
public WebConnectionStream (WebConnection cnc, WebConnectionData data)
{
if (data == null)
throw new InvalidOperationException ("data was not initialized");
if (data.Headers == null)
throw new InvalidOperationException ("data.Headers was not initialized");
if (data.request == null)
throw new InvalidOperationException ("data.request was not initialized");
isRead = true;
cb_wrapper = new AsyncCallback (ReadCallbackWrapper);
pending = new ManualResetEvent (true);
this.request = data.request;
read_timeout = request.ReadWriteTimeout;
write_timeout = read_timeout;
this.cnc = cnc;
string contentType = data.Headers ["Transfer-Encoding"];
bool chunkedRead = (contentType != null && contentType.IndexOf ("chunked", StringComparison.OrdinalIgnoreCase) != -1);
string clength = data.Headers ["Content-Length"];
if (!chunkedRead && clength != null && clength != "") {
try {
contentLength = Int32.Parse (clength);
if (contentLength == 0 && !IsNtlmAuth ()) {
ReadAll ();
}
} catch {
contentLength = Int64.MaxValue;
}
} else {
contentLength = Int64.MaxValue;
}
// Negative numbers?
if (!Int32.TryParse (clength, out stream_length))
stream_length = -1;
}
示例2: HttpWebResponse
// Constructors
internal HttpWebResponse (Uri uri, string method, WebConnectionData data, CookieContainer container)
{
this.uri = uri;
this.method = method;
webHeaders = data.Headers;
version = data.Version;
statusCode = (HttpStatusCode) data.StatusCode;
statusDescription = data.StatusDescription;
stream = data.stream;
contentLength = -1;
try {
string cl = webHeaders ["Content-Length"];
if (String.IsNullOrEmpty (cl) || !Int64.TryParse (cl, out contentLength))
contentLength = -1;
} catch (Exception) {
contentLength = -1;
}
if (container != null) {
this.cookie_container = container;
FillCookies ();
}
string content_encoding = webHeaders ["Content-Encoding"];
if (content_encoding == "gzip" && (data.request.AutomaticDecompression & DecompressionMethods.GZip) != 0)
stream = new GZipStream (stream, CompressionMode.Decompress);
else if (content_encoding == "deflate" && (data.request.AutomaticDecompression & DecompressionMethods.Deflate) != 0)
stream = new DeflateStream (stream, CompressionMode.Decompress);
}
示例3: WebConnection
public WebConnection (WebConnectionGroup group, ServicePoint sPoint)
{
this.sPoint = sPoint;
buffer = new byte [4096];
readState = ReadState.None;
Data = new WebConnectionData ();
initConn = new WaitCallback (state => {
try {
InitConnection (state);
} catch {}
});
queue = group.Queue;
abortHelper = new AbortHelper ();
abortHelper.Connection = this;
abortHandler = new EventHandler (abortHelper.Abort);
}
示例4: InitConnection
void InitConnection (object state)
{
HttpWebRequest request = (HttpWebRequest) state;
request.WebConnection = this;
if (request.Aborted)
return;
keepAlive = request.KeepAlive;
Data = new WebConnectionData (request);
retry:
Connect (request);
if (request.Aborted)
return;
if (status != WebExceptionStatus.Success) {
if (!request.Aborted) {
request.SetWriteStreamError (status, connect_exception);
Close (true);
}
return;
}
if (!CreateStream (request)) {
if (request.Aborted)
return;
WebExceptionStatus st = status;
if (Data.Challenge != null)
goto retry;
Exception cnc_exc = connect_exception;
connect_exception = null;
request.SetWriteStreamError (st, cnc_exc);
Close (true);
return;
}
readState = ReadState.None;
request.SetWriteStream (new WebConnectionStream (this, request));
}
示例5: HandleError
void HandleError (WebExceptionStatus st, Exception e, string where)
{
status = st;
lock (this) {
if (st == WebExceptionStatus.RequestCanceled)
Data = new WebConnectionData ();
}
if (e == null) { // At least we now where it comes from
try {
#if TARGET_JVM
throw new Exception ();
#else
throw new Exception (new System.Diagnostics.StackTrace ().ToString ());
#endif
} catch (Exception e2) {
e = e2;
}
}
HttpWebRequest req = null;
if (Data != null && Data.request != null)
req = Data.request;
Close (true);
if (req != null) {
req.FinishedReading = true;
req.SetResponseError (st, e, where);
}
}
示例6: Close
internal void Close (bool sendNext)
{
lock (this) {
if (nstream != null) {
try {
nstream.Close ();
} catch {}
nstream = null;
}
if (socket != null) {
try {
socket.Close ();
} catch {}
socket = null;
}
if (ntlm_authenticated)
ResetNtlm ();
busy = false;
Data = new WebConnectionData ();
if (sendNext)
SendNext ();
}
}
示例7: WebConnection
public WebConnection (IWebConnectionState wcs, ServicePoint sPoint)
{
this.state = wcs;
this.sPoint = sPoint;
buffer = new byte [4096];
Data = new WebConnectionData ();
initConn = new WaitCallback (state => {
try {
InitConnection (state);
} catch {}
});
queue = wcs.Group.Queue;
abortHelper = new AbortHelper ();
abortHelper.Connection = this;
abortHandler = new EventHandler (abortHelper.Abort);
}
示例8: GetResponse
static int GetResponse (WebConnectionData data, ServicePoint sPoint,
byte [] buffer, int max)
{
int pos = 0;
string line = null;
bool lineok = false;
bool isContinue = false;
bool emptyFirstLine = false;
do {
if (data.ReadState == ReadState.Aborted)
return -1;
if (data.ReadState == ReadState.None) {
lineok = ReadLine (buffer, ref pos, max, ref line);
if (!lineok)
return 0;
if (line == null) {
emptyFirstLine = true;
continue;
}
emptyFirstLine = false;
data.ReadState = ReadState.Status;
string [] parts = line.Split (' ');
if (parts.Length < 2)
return -1;
if (String.Compare (parts [0], "HTTP/1.1", true) == 0) {
data.Version = HttpVersion.Version11;
sPoint.SetVersion (HttpVersion.Version11);
} else {
data.Version = HttpVersion.Version10;
sPoint.SetVersion (HttpVersion.Version10);
}
data.StatusCode = (int) UInt32.Parse (parts [1]);
if (parts.Length >= 3)
data.StatusDescription = String.Join (" ", parts, 2, parts.Length - 2);
else
data.StatusDescription = "";
if (pos >= max)
return pos;
}
emptyFirstLine = false;
if (data.ReadState == ReadState.Status) {
data.ReadState = ReadState.Headers;
data.Headers = new WebHeaderCollection ();
ArrayList headers = new ArrayList ();
bool finished = false;
while (!finished) {
if (ReadLine (buffer, ref pos, max, ref line) == false)
break;
if (line == null) {
// Empty line: end of headers
finished = true;
continue;
}
if (line.Length > 0 && (line [0] == ' ' || line [0] == '\t')) {
int count = headers.Count - 1;
if (count < 0)
break;
string prev = (string) headers [count] + line;
headers [count] = prev;
} else {
headers.Add (line);
}
}
if (!finished)
return 0;
foreach (string s in headers)
data.Headers.SetInternal (s);
if (data.StatusCode == (int) HttpStatusCode.Continue) {
sPoint.SendContinue = true;
if (pos >= max)
return pos;
if (data.request.ExpectContinue) {
data.request.DoContinueDelegate (data.StatusCode, data.Headers);
// Prevent double calls when getting the
// headers in several packets.
data.request.ExpectContinue = false;
}
data.ReadState = ReadState.None;
isContinue = true;
}
else {
data.ReadState = ReadState.Content;
return pos;
}
}
//.........这里部分代码省略.........
示例9: Close
internal void Close (bool sendNext)
{
lock (this) {
if (Data != null && Data.request != null && Data.request.ReuseConnection) {
Data.request.ReuseConnection = false;
return;
}
if (nstream != null) {
try {
nstream.Close ();
} catch {}
nstream = null;
}
if (socket != null) {
try {
socket.Close ();
} catch {}
socket = null;
}
if (ntlm_authenticated)
ResetNtlm ();
if (Data != null) {
lock (Data) {
Data.ReadState = ReadState.Aborted;
}
}
state.SetIdle ();
Data = new WebConnectionData ();
if (sendNext)
SendNext ();
connect_request = null;
connect_ntlm_auth_state = NtlmAuthState.None;
}
}
示例10: Write
internal bool Write (HttpWebRequest request, byte [] buffer, int offset, int size, ref string err_msg)
{
err_msg = null;
Stream s = null;
lock (this) {
if (Data.request != request)
throw new ObjectDisposedException (typeof (NetworkStream).FullName);
s = nstream;
if (s == null)
return false;
}
try {
s.Write (buffer, offset, size);
// here SSL handshake should have been done
if (ssl && !certsAvailable)
GetCertificates (s);
} catch (Exception e) {
err_msg = e.Message;
WebExceptionStatus wes = WebExceptionStatus.SendFailure;
string msg = "Write: " + err_msg;
if (e is WebException) {
HandleError (wes, e, msg);
return false;
}
// if SSL is in use then check for TrustFailure
if (ssl) {
#if SECURITY_DEP && (MONOTOUCH || MONODROID)
HttpsClientStream https = (s as HttpsClientStream);
if (https.TrustFailure) {
#else
if ((bool) piTrustFailure.GetValue (s , null)) {
#endif
wes = WebExceptionStatus.TrustFailure;
msg = "Trust failure";
}
}
HandleError (wes, e, msg);
return false;
}
return true;
}
internal void Close (bool sendNext)
{
lock (this) {
if (Data != null && Data.request != null && Data.request.ReuseConnection) {
Data.request.ReuseConnection = false;
return;
}
if (nstream != null) {
try {
nstream.Close ();
} catch {}
nstream = null;
}
if (socket != null) {
try {
socket.Close ();
} catch {}
socket = null;
}
if (ntlm_authenticated)
ResetNtlm ();
if (Data != null) {
lock (Data) {
Data.ReadState = ReadState.Aborted;
}
}
state.SetIdle ();
Data = new WebConnectionData ();
if (sendNext)
SendNext ();
connect_request = null;
connect_ntlm_auth_state = NtlmAuthState.None;
}
}
void Abort (object sender, EventArgs args)
{
lock (this) {
lock (queue) {
HttpWebRequest req = (HttpWebRequest) sender;
if (Data.request == req || Data.request == null) {
if (!req.FinishedReading) {
status = WebExceptionStatus.RequestCanceled;
Close (false);
if (queue.Count > 0) {
Data.request = (HttpWebRequest) queue.Dequeue ();
SendRequest (Data.request);
}
}
return;
}
//.........这里部分代码省略.........
示例11: SetResponseData
internal void SetResponseData (WebConnectionData data)
{
lock (locker) {
if (Aborted) {
if (data.stream != null)
data.stream.Close ();
return;
}
WebException wexc = null;
try {
webResponse = new HttpWebResponse (actualUri, method, data, cookieContainer);
} catch (Exception e) {
wexc = new WebException (e.Message, e, WebExceptionStatus.ProtocolError, null);
if (data.stream != null)
data.stream.Close ();
}
if (wexc == null && (method == "POST" || method == "PUT")) {
CheckSendError (data);
if (saved_exc != null)
wexc = (WebException) saved_exc;
}
WebAsyncResult r = asyncRead;
bool forced = false;
if (r == null && webResponse != null) {
// This is a forced completion (302, 204)...
forced = true;
r = new WebAsyncResult (null, null);
r.SetCompleted (false, webResponse);
}
if (r != null) {
if (wexc != null) {
haveResponse = true;
if (!r.IsCompleted)
r.SetCompleted (false, wexc);
r.DoCallback ();
return;
}
bool redirected;
try {
redirected = CheckFinalStatus (r);
if (!redirected) {
if (ntlm_auth_state != NtlmAuthState.None && authCompleted && webResponse != null
&& (int)webResponse.StatusCode < 400) {
WebConnectionStream wce = webResponse.GetResponseStream () as WebConnectionStream;
if (wce != null) {
WebConnection cnc = wce.Connection;
cnc.NtlmAuthenticated = true;
}
}
// clear internal buffer so that it does not
// hold possible big buffer (bug #397627)
if (writeStream != null)
writeStream.KillBuffer ();
haveResponse = true;
r.SetCompleted (false, webResponse);
r.DoCallback ();
} else {
if (webResponse != null) {
if (ntlm_auth_state != NtlmAuthState.None) {
HandleNtlmAuth (r);
return;
}
webResponse.Close ();
}
finished_reading = false;
haveResponse = false;
webResponse = null;
r.Reset ();
servicePoint = GetServicePoint ();
abortHandler = servicePoint.SendRequest (this, connectionGroup);
}
} catch (WebException wexc2) {
if (forced) {
saved_exc = wexc2;
haveResponse = true;
}
r.SetCompleted (false, wexc2);
r.DoCallback ();
return;
} catch (Exception ex) {
wexc = new WebException (ex.Message, ex, WebExceptionStatus.ProtocolError, null);
if (forced) {
saved_exc = wexc;
haveResponse = true;
}
r.SetCompleted (false, wexc);
r.DoCallback ();
return;
}
}
}
}
示例12: CheckSendError
void CheckSendError (WebConnectionData data)
{
// Got here, but no one called GetResponse
int status = data.StatusCode;
if (status < 400 || status == 401 || status == 407)
return;
if (writeStream != null && asyncRead == null && !writeStream.CompleteRequestWritten) {
// The request has not been completely sent and we got here!
// We should probably just close and cause an error in any case,
saved_exc = new WebException (data.StatusDescription, null, WebExceptionStatus.ProtocolError, webResponse);
if (allowBuffering || sendChunked || writeStream.totalWritten >= contentLength) {
webResponse.ReadAll ();
} else {
writeStream.IgnoreIOErrors = true;
}
}
}
示例13: InitConnection
void InitConnection (object state)
{
HttpWebRequest request = (HttpWebRequest) state;
request.WebConnection = this;
if (request.ReuseConnection)
request.StoredConnection = this;
if (request.Aborted)
return;
keepAlive = request.KeepAlive;
Data = new WebConnectionData (request);
retry:
Connect (request);
if (request.Aborted)
return;
if (status != WebExceptionStatus.Success) {
if (!request.Aborted) {
request.SetWriteStreamError (status, connect_exception);
Close (true);
}
return;
}
if (!CreateStream (request)) {
if (request.Aborted)
return;
WebExceptionStatus st = status;
if (Data.Challenge != null)
goto retry;
Exception cnc_exc = connect_exception;
if (cnc_exc == null && (Data.StatusCode == 401 || Data.StatusCode == 407)) {
st = WebExceptionStatus.ProtocolError;
cnc_exc = new WebException (Data.StatusCode == 407 ? "(407) Proxy Authentication Required" : "(401) Unauthorized" , st);
}
connect_exception = null;
request.SetWriteStreamError (st, cnc_exc);
Close (true);
return;
}
request.SetWriteStream (new WebConnectionStream (this, request));
}