Exemplo n.º 1
0
        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);
                }
            }
        }
Exemplo n.º 2
0
        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);
                }
            }
        }
Exemplo n.º 4
0
        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);
        }
Exemplo n.º 5
0
        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;
                        }
                    }
                }
            }
        }