public static ReturnType Create <ReturnType>() { HttpWebRequest req = (HttpWebRequest)WebRequest.Create( string.Format("{0}/Create?EntityName='{1}'", sUri.TrimEnd('/'), typeof(ReturnType).Name) ); NetworkCredential serviceCreds = new NetworkCredential(UserName, Password); CredentialCache cache = new CredentialCache(); cache.Add(new Uri(sUri), "Basic", serviceCreds); req.Credentials = cache; req.Method = "GET"; req.ContentType = "application/xml"; req.Timeout = 1000 * 60 * 15; // 15 minutes try { HttpWebResponse resp = (HttpWebResponse)req.GetResponse(); var response = new StreamReader(resp.GetResponseStream()).ReadToEnd(); //XDocument doc = XDocument.Load(resp.GetResponseStream()); XDocument doc = XDocument.Parse(response); resp.Close(); ReturnType oEntity = doc.Root.ToString().ToBusinessEntity <ReturnType>(SourceFormatEnum.XML); return(oEntity); } catch (WebException wex) { throw DataServiceExceptionUtil.ParseException(wex); } }
public static string FileUpload(byte[] fileContent, string TargetFileName) { HttpWebRequest req = (HttpWebRequest)WebRequest.Create(sUri.TrimEnd('/') + "/FileUpload?fileName='" + TargetFileName + "'"); NetworkCredential serviceCreds = new NetworkCredential(UserName, Password); CredentialCache cache = new CredentialCache(); Uri uri = new Uri(sUri); cache.Add(uri, "Basic", serviceCreds); req.Credentials = cache; req.Method = "POST"; req.Timeout = 1000 * 60 * 20; // 20 minutes req.SendChunked = true; req.ContentLength = fileContent.Length; Stream reqStrm = req.GetRequestStream(); reqStrm.Write(fileContent, 0, fileContent.Length); reqStrm.Close(); try { HttpWebResponse resp = (HttpWebResponse)req.GetResponse(); var response = new StreamReader(resp.GetResponseStream()).ReadToEnd(); //XDocument doc = XDocument.Load(resp.GetResponseStream()); XDocument doc = XDocument.Parse(response); resp.Close(); return(doc.Root.Value); } catch (WebException wex) { throw DataServiceExceptionUtil.ParseException(wex); } }
private static ReturnType DoPost <ReturnType>(string SvcOperName, object o, bool enableAuthentication) { HttpWebRequest req = (HttpWebRequest)WebRequest.Create(sUri.TrimEnd('/') + "/" + SvcOperName); if (enableAuthentication) { NetworkCredential serviceCreds = new NetworkCredential(UserName, Password); CredentialCache cache = new CredentialCache(); Uri uri = new Uri(sUri); cache.Add(uri, "Basic", serviceCreds); req.Credentials = cache; } req.Method = "POST"; //req.ContentType = "application/x-www-form-urlencoded"; req.ContentType = "application/xml"; req.Timeout = 1000 * 60 * 15; // 15 minutes byte[] arr = o.ToSerializedByteArrayUTF8(); req.ContentLength = arr.Length; Stream reqStrm = req.GetRequestStream(); reqStrm.Write(arr, 0, arr.Length); reqStrm.Close(); try { HttpWebResponse resp = (HttpWebResponse)req.GetResponse(); var stream = resp.GetResponseStream(); if (stream.CanRead) { var response = new StreamReader(stream).ReadToEnd(); //XDocument doc = XDocument.Load(stream); XDocument doc = XDocument.Parse(response); resp.Close(); ReturnType oResp = doc.Root.ToString().ToBusinessEntity <ReturnType>(SourceFormatEnum.XML); return(oResp); } else { return(default(ReturnType)); } } catch (WebException wex) { throw DataServiceExceptionUtil.ParseException(wex); } }
public static ReturnType Delete <ReturnType>(object entityToDelete) { HttpWebRequest req = (HttpWebRequest)WebRequest.Create( string.Format("{0}/Delete?EntityName='{1}'", sUri.TrimEnd('/'), typeof(ReturnType).Name) ); NetworkCredential serviceCreds = new NetworkCredential(UserName, Password); CredentialCache cache = new CredentialCache(); Uri uri = new Uri(sUri); cache.Add(uri, "Basic", serviceCreds); req.Credentials = cache; req.Method = "POST"; req.ContentType = "application/xml"; req.Timeout = 1000 * 60 * 15; // 15 minutes byte[] arr = entityToDelete.ToSerializedByteArrayUTF8(); req.ContentLength = arr.Length; Stream reqStrm = req.GetRequestStream(); reqStrm.Write(arr, 0, arr.Length); reqStrm.Close(); try { HttpWebResponse resp = (HttpWebResponse)req.GetResponse(); var response = new StreamReader(resp.GetResponseStream()).ReadToEnd(); //XDocument doc = XDocument.Load(resp.GetResponseStream()); XDocument doc = XDocument.Parse(response); resp.Close(); ReturnType oResp = doc.Root.ToString().ToBusinessEntity <ReturnType>(SourceFormatEnum.XML); return(oResp); } catch (WebException wex) { throw DataServiceExceptionUtil.ParseException(wex); } }
/// <summary> /// Delegate for invoking networking operations with retry. /// </summary> /// <param name="operation">the operation to invoke with retry</param> private void InvokeOperationWithRetry(Action operation) { int retryremaining = Constants.MaxRetryAttempts; while (retryremaining > 0) { try { operation(); // The operation is successful, so retryremaining=0 retryremaining = 0; } catch (Exception ex) { // Operation not successful // De-serialize error message to check the error code from AzureAD Service ErrorResponseEx parsedException = DataServiceExceptionUtil.DeserializeErrorMessage(ex); if (parsedException == null) { // Could not parse the exception so it wasn't in the format of DataServiceException throw ex; } else { // Look at the error code to determine if we want to retry on this exception switch (parsedException.Code) { // These are the errors we dont want to rety on // Please look at the definistions for details about each of these case Constants.MessageIdAuthorizationIdentityDisabled: case Constants.MessageIdAuthorizationIdentityNotFound: case Constants.MessageIdAuthorizationRequestDenied: case Constants.MessageIdBadRequest: case Constants.MessageIdBindingRedirectionInternalServerError: case Constants.MessageIdContractVersionHeaderMissing: case Constants.MessageIdHeaderNotSupported: case Constants.MessageIdInternalServerError: case Constants.MessageIdInvalidDataContractVersion: case Constants.MessageIdInvalidReplicaSessionKey: case Constants.MessageIdInvalidRequestUrl: case Constants.MessageIdMediaTypeNotSupported: case Constants.MessageIdMultipleObjectsWithSameKeyValue: case Constants.MessageIdObjectNotFound: case Constants.MessageIdResourceNotFound: case Constants.MessageIdThrottledPermanently: case Constants.MessageIdThrottledTemporarily: case Constants.MessageIdUnauthorized: case Constants.MessageIdUnknown: case Constants.MessageIdUnsupportedQuery: case Constants.MessageIdUnsupportedToken: { retryremaining = 0; // We just create a new expection with the msg // and throw it so that the 'OnException' handler handles it throw new InvalidOperationException(parsedException.Message, ex); } // This exception means that the user's data is not in current DataCenter, // special handling is required for this exception case Constants.MessageIdBindingRedirection: { HandleBindingRedirectionException(parsedException, operation); retryremaining = 0; break; } // This means that the replica we were trying to go to was unavailable, // retry will possibly go to another replica and may work case Constants.MessageIdReplicaUnavailable: { retryremaining--; break; } // This means that the token has expired. case Constants.MessageIdExpired: { // authHeader = GetAuthorizationHeader(); retryremaining--; break; } } } } } }