protected override void CompletedRequest() { Debug.Assert(null != this.response || null != this.Failure, "should have response or exception"); if (null != this.response) { InvalidOperationException failure = null; if (!WebUtil.SuccessStatusCode(this.response.StatusCode)) { failure = DataServiceContext.GetResponseText(this.response.GetResponseStream, this.response.StatusCode); } if (failure != null) { this.response.Close(); this.HandleFailure(failure); } } }
protected override void CompletedRequest() { Func <Stream> getResponseStream = null; if (this.response != null) { InvalidOperationException e = null; if (!WebUtil.SuccessStatusCode(this.response.StatusCode)) { getResponseStream = () => WebUtil.GetResponseStream(this.response, (DataServiceContext)base.Source); e = BaseSaveResult.GetResponseText(getResponseStream, this.response.StatusCode); } if (e != null) { this.response.Close(); base.HandleFailure(e); } } }
/// <summary>invoked for derived classes to cleanup before callback is invoked</summary> protected override void CompletedRequest() { Debug.Assert(null != this.response || null != this.Failure, "should have response or exception"); if (null != this.response) { // Can't use DataServiceContext.HandleResponse as this request didn't necessarily go to our server // the MR could have been served by arbitrary server. InvalidOperationException failure = null; if (!WebUtil.SuccessStatusCode(this.response.StatusCode)) { failure = DataServiceContext.GetResponseText(this.response.GetResponseStream, this.response.StatusCode); } if (failure != null) { // we've cached off what we need, headers still accessible after close this.response.Close(); this.HandleFailure(failure); } } }
internal static InvalidOperationException HandleResponse(System.Data.Services.Client.RequestInfo requestInfo, HttpStatusCode statusCode, string responseVersion, Func <Stream> getResponseStream, bool throwOnFailure, out Version parsedResponseVersion) { InvalidOperationException responseText = null; if (!CanHandleResponseVersion(responseVersion, out parsedResponseVersion)) { responseText = System.Data.Services.Client.Error.InvalidOperation(System.Data.Services.Client.Strings.Context_VersionNotSupported(responseVersion, Serializer.SerializeSupportedVersions())); } if (responseText == null) { responseText = requestInfo.ValidateResponseVersion(parsedResponseVersion); } if ((responseText == null) && !WebUtil.SuccessStatusCode(statusCode)) { responseText = GetResponseText(getResponseStream, statusCode); } if ((responseText != null) && throwOnFailure) { throw responseText; } return(responseText); }
protected void HandleOperationResponseHeaders(HttpStatusCode statusCode, Dictionary <string, string> headers) { Descriptor descriptor = this.ChangedEntries[this.entryIndex]; if (descriptor.DescriptorKind == DescriptorKind.Entity) { EntityDescriptor descriptor2 = (EntityDescriptor)descriptor; if ((((descriptor.State == EntityStates.Added) || (this.streamRequestKind == StreamRequestKind.PostMediaResource)) || Util.IsFlagSet(this.Options, SaveChangesOptions.PatchOnUpdate)) && WebUtil.SuccessStatusCode(statusCode)) { string str; string str2; Uri editLink = null; headers.TryGetValue("Location", out str); headers.TryGetValue("DataServiceId", out str2); if (str != null) { editLink = WebUtil.ValidateLocationHeader(str); } else if ((descriptor.State == EntityStates.Added) || (this.streamRequestKind == StreamRequestKind.PostMediaResource)) { throw System.Data.Services.Client.Error.NotSupported(System.Data.Services.Client.Strings.Deserialize_NoLocationHeader); } if (str2 != null) { if (str == null) { throw System.Data.Services.Client.Error.NotSupported(System.Data.Services.Client.Strings.Context_BothLocationAndIdMustBeSpecified); } WebUtil.ValidateIdentityValue(str2); } else { str2 = str; } if (null != editLink) { this.RequestInfo.EntityTracker.AttachLocation(descriptor2.Entity, str2, editLink); } } if (this.streamRequestKind != StreamRequestKind.None) { if (!WebUtil.SuccessStatusCode(statusCode)) { if (this.streamRequestKind == StreamRequestKind.PostMediaResource) { descriptor.State = EntityStates.Added; } this.streamRequestKind = StreamRequestKind.None; descriptor.ContentGeneratedForSave = true; } else { string str3; if ((this.streamRequestKind == StreamRequestKind.PostMediaResource) && headers.TryGetValue("ETag", out str3)) { descriptor2.ETag = str3; } } } } }