Beispiel #1
0
        protected IAsyncResult BeginInvoke(string methodName, string requestUrl, object[] parameters, AsyncCallback callback, object asyncState)
        {
            HttpSimpleMethodStubInfo   method = (HttpSimpleMethodStubInfo)TypeStub.GetMethod(methodName);
            SimpleWebClientAsyncResult ainfo  = null;

            try
            {
                MimeParameterWriter parameterWriter = (MimeParameterWriter)method.ParameterWriterType.Create();
                string     url = parameterWriter.GetRequestUrl(requestUrl, parameters);
                WebRequest req = GetWebRequest(new Uri(url));

                ainfo                 = new SimpleWebClientAsyncResult(req, callback, asyncState);
                ainfo.Parameters      = parameters;
                ainfo.ParameterWriter = parameterWriter;
                ainfo.Method          = method;

                ainfo.Request = req;
                ainfo.Request.BeginGetRequestStream(new AsyncCallback(AsyncGetRequestStreamDone), ainfo);
                RegisterMapping(asyncState, ainfo);
            }
            catch (Exception ex)
            {
                if (ainfo != null)
                {
                    ainfo.SetCompleted(null, ex, false);
                }
                else
                {
                    throw ex;
                }
            }

            return(ainfo);
        }
Beispiel #2
0
        protected void InvokeAsync(string methodName, string requestUrl, object[] parameters, SendOrPostCallback callback, object userState)
        {
            if (userState == null)
            {
                userState = base.NullToken;
            }
            AsyncOperation       userAsyncState = AsyncOperationManager.CreateOperation(new UserToken(callback, userState));
            WebClientAsyncResult result         = new WebClientAsyncResult(this, null, null, new AsyncCallback(this.InvokeAsyncCallback), userAsyncState);

            try
            {
                base.AsyncInvokes.Add(userState, result);
            }
            catch (Exception exception)
            {
                if (((exception is ThreadAbortException) || (exception is StackOverflowException)) || (exception is OutOfMemoryException))
                {
                    throw;
                }
                if (Tracing.On)
                {
                    Tracing.ExceptionCatch(TraceEventType.Error, this, "InvokeAsync", exception);
                }
                Exception exception2         = new ArgumentException(Res.GetString("AsyncDuplicateUserState"), exception);
                object[]  results            = new object[1];
                InvokeCompletedEventArgs arg = new InvokeCompletedEventArgs(results, exception2, false, userState);
                userAsyncState.PostOperationCompleted(callback, arg);
                return;
            }
            try
            {
                HttpClientMethod    clientMethod    = this.GetClientMethod(methodName);
                MimeParameterWriter parameterWriter = this.GetParameterWriter(clientMethod);
                Uri requestUri = new Uri(requestUrl);
                if (parameterWriter != null)
                {
                    parameterWriter.RequestEncoding = base.RequestEncoding;
                    requestUrl = parameterWriter.GetRequestUrl(requestUri.AbsoluteUri, parameters);
                    requestUri = new Uri(requestUrl, true);
                }
                result.InternalAsyncState = new InvokeAsyncState(clientMethod, parameterWriter, parameters);
                base.BeginSend(requestUri, result, parameterWriter.UsesWriteRequest);
            }
            catch (Exception exception3)
            {
                if (((exception3 is ThreadAbortException) || (exception3 is StackOverflowException)) || (exception3 is OutOfMemoryException))
                {
                    throw;
                }
                if (Tracing.On)
                {
                    Tracing.ExceptionCatch(TraceEventType.Error, this, "InvokeAsync", exception3);
                }
                object[] objArray2 = new object[1];
                base.OperationCompleted(userState, objArray2, exception3, false);
            }
        }
        /// <include file='doc\HttpClientProtocol.uex' path='docs/doc[@for="HttpSimpleClientProtocol.InvokeAsync1"]/*' />
        /// <devdoc>
        ///    <para>[To be supplied.]</para>
        /// </devdoc>
        protected void InvokeAsync(string methodName, string requestUrl, object[] parameters, SendOrPostCallback callback, object userState)
        {
            if (userState == null)
            {
                userState = NullToken;
            }
            AsyncOperation       asyncOp     = AsyncOperationManager.CreateOperation(new UserToken(callback, userState));
            WebClientAsyncResult asyncResult = new WebClientAsyncResult(this, null, null, new AsyncCallback(InvokeAsyncCallback), asyncOp);

            try {
                AsyncInvokes.Add(userState, asyncResult);
            }
            catch (Exception e) {
                if (e is ThreadAbortException || e is StackOverflowException || e is OutOfMemoryException)
                {
                    throw;
                }
                if (Tracing.On)
                {
                    Tracing.ExceptionCatch(TraceEventType.Error, this, "InvokeAsync", e);
                }
                Exception exception = new ArgumentException(Res.GetString(Res.AsyncDuplicateUserState), e);
                InvokeCompletedEventArgs eventArgs = new InvokeCompletedEventArgs(new object[] { null }, exception, false, userState);
                asyncOp.PostOperationCompleted(callback, eventArgs);
                return;
            }
            try {
                HttpClientMethod    method      = GetClientMethod(methodName);
                MimeParameterWriter paramWriter = GetParameterWriter(method);
                Uri requestUri = new Uri(requestUrl);
                if (paramWriter != null)
                {
                    paramWriter.RequestEncoding = RequestEncoding;
                    requestUrl = paramWriter.GetRequestUrl(requestUri.AbsoluteUri, parameters);
                    requestUri = new Uri(requestUrl, true);
                }
                asyncResult.InternalAsyncState = new InvokeAsyncState(method, paramWriter, parameters);
                BeginSend(requestUri, asyncResult, paramWriter.UsesWriteRequest);
            }
            catch (Exception e) {
                if (e is ThreadAbortException || e is StackOverflowException || e is OutOfMemoryException)
                {
                    throw;
                }
                if (Tracing.On)
                {
                    Tracing.ExceptionCatch(TraceEventType.Error, this, "InvokeAsync", e);
                }
                OperationCompleted(userState, new object[] { null }, e, false);
            }
        }
Beispiel #4
0
        /// <include file='doc\HttpClientProtocol.uex' path='docs/doc[@for="HttpSimpleClientProtocol.BeginInvoke"]/*' />
        /// <devdoc>
        ///    <para>
        ///       Starts an asynchronous invocation of a method of a HTTP web service.
        ///    </para>
        /// </devdoc>
        protected IAsyncResult BeginInvoke(string methodName, string requestUrl, object[] parameters, AsyncCallback callback, object asyncState)
        {
            HttpClientMethod    method      = GetClientMethod(methodName);
            MimeParameterWriter paramWriter = GetParameterWriter(method);
            Uri requestUri = new Uri(requestUrl);

            if (paramWriter != null)
            {
                paramWriter.RequestEncoding = RequestEncoding;
                requestUrl = paramWriter.GetRequestUrl(requestUri.AbsoluteUri, parameters);
                requestUri = new Uri(requestUrl, true);
            }
            InvokeAsyncState invokeState = new InvokeAsyncState(method, paramWriter, parameters);

            return(BeginSend(requestUri, invokeState, callback, asyncState, paramWriter.UsesWriteRequest));
        }
Beispiel #5
0
        protected IAsyncResult BeginInvoke(string methodName, string requestUrl, object[] parameters, AsyncCallback callback, object asyncState)
        {
            HttpClientMethod    clientMethod    = this.GetClientMethod(methodName);
            MimeParameterWriter parameterWriter = this.GetParameterWriter(clientMethod);
            Uri requestUri = new Uri(requestUrl);

            if (parameterWriter != null)
            {
                parameterWriter.RequestEncoding = base.RequestEncoding;
                requestUrl = parameterWriter.GetRequestUrl(requestUri.AbsoluteUri, parameters);
                requestUri = new Uri(requestUrl, true);
            }
            InvokeAsyncState     internalAsyncState = new InvokeAsyncState(clientMethod, parameterWriter, parameters);
            WebClientAsyncResult asyncResult        = new WebClientAsyncResult(this, internalAsyncState, null, callback, asyncState);

            return(base.BeginSend(requestUri, asyncResult, parameterWriter.UsesWriteRequest));
        }
Beispiel #6
0
        protected object Invoke(string methodName, string requestUrl, object[] parameters)
        {
            HttpSimpleMethodStubInfo method          = (HttpSimpleMethodStubInfo)TypeStub.GetMethod(methodName);
            MimeParameterWriter      parameterWriter = (MimeParameterWriter)method.ParameterWriterType.Create();

            string     url     = parameterWriter.GetRequestUrl(requestUrl, parameters);
            WebRequest request = GetWebRequest(new Uri(url, true));

            parameterWriter.InitializeRequest(request, parameters);

            if (parameterWriter.UsesWriteRequest)
            {
                Stream stream = request.GetRequestStream();
                parameterWriter.WriteRequest(stream, parameters);
                stream.Close();
            }

            WebResponse response = GetWebResponse(request);

            MimeReturnReader returnReader = (MimeReturnReader)method.ReturnReaderType.Create();

            return(returnReader.Read(response, response.GetResponseStream()));
        }
 internal InvokeAsyncState(HttpClientMethod method, MimeParameterWriter paramWriter, object[] parameters)
 {
     this.Method = method;
     this.ParamWriter = paramWriter;
     this.Parameters = parameters;
 }
Beispiel #8
0
 internal InvokeAsyncState(HttpClientMethod method, MimeParameterWriter paramWriter, object[] parameters)
 {
     this.Method      = method;
     this.ParamWriter = paramWriter;
     this.Parameters  = parameters;
 }
Beispiel #9
0
        /// <include file='doc\HttpClientProtocol.uex' path='docs/doc[@for="HttpSimpleClientProtocol.Invoke"]/*' />
        /// <devdoc>
        ///    <para>
        ///       Invokes a method of a HTTP web service.
        ///    </para>
        /// </devdoc>
        protected object Invoke(string methodName, string requestUrl, object[] parameters)
        {
            WebResponse         response    = null;
            HttpClientMethod    method      = GetClientMethod(methodName);
            MimeParameterWriter paramWriter = GetParameterWriter(method);
            Uri requestUri = new Uri(requestUrl);

            if (paramWriter != null)
            {
                paramWriter.RequestEncoding = RequestEncoding;
                requestUrl = paramWriter.GetRequestUrl(requestUri.AbsoluteUri, parameters);
                requestUri = new Uri(requestUrl, true);
            }
            WebRequest request = null;

            try {
                request            = GetWebRequest(requestUri);
                PendingSyncRequest = request;
                if (paramWriter != null)
                {
                    paramWriter.InitializeRequest(request, parameters);
                    // CONSIDER,yannc: in future versions when we allow pluggable protocols
                    //      we may want to let them write in the request stream even
                    //      if there are no parameters.
                    if (paramWriter.UsesWriteRequest)
                    {
                        if (parameters.Length == 0)
                        {
                            request.ContentLength = 0;
                        }
                        else
                        {
                            Stream requestStream = null;
                            try {
                                requestStream = request.GetRequestStream();
                                paramWriter.WriteRequest(requestStream, parameters);
                            }
                            finally {
                                if (requestStream != null)
                                {
                                    requestStream.Close();
                                }
                            }
                        }
                    }
                }
                response = GetWebResponse(request);
                Stream responseStream = null;
                if (response.ContentLength != 0)
                {
                    responseStream = response.GetResponseStream();
                }

                return(ReadResponse(method, response, responseStream));
            }
            finally {
                if (request == PendingSyncRequest)
                {
                    PendingSyncRequest = null;
                }
            }
        }
        /// <include file='doc\HttpClientProtocol.uex' path='docs/doc[@for="HttpSimpleClientProtocol.Invoke"]/*' />
        /// <devdoc>
        ///    <para>
        ///       Invokes a method of a HTTP web service.
        ///    </para>
        /// </devdoc>
        protected object Invoke(string methodName, string requestUrl, object[] parameters)
        {
            WebResponse         response    = null;
            HttpClientMethod    method      = GetClientMethod(methodName);
            MimeParameterWriter paramWriter = GetParameterWriter(method);
            Uri requestUri = new Uri(requestUrl);

            if (paramWriter != null)
            {
                paramWriter.RequestEncoding = RequestEncoding;
                requestUrl = paramWriter.GetRequestUrl(requestUri.AbsoluteUri, parameters);
                requestUri = new Uri(requestUrl, true);
            }
            WebRequest request = null;

            try {
                request = GetWebRequest(requestUri);
                NotifyClientCallOut(request);
                PendingSyncRequest = request;
                if (paramWriter != null)
                {
                    paramWriter.InitializeRequest(request, parameters);
                    //


                    if (paramWriter.UsesWriteRequest)
                    {
                        if (parameters.Length == 0)
                        {
                            request.ContentLength = 0;
                        }
                        else
                        {
                            Stream requestStream = null;
                            try {
                                requestStream = request.GetRequestStream();
                                paramWriter.WriteRequest(requestStream, parameters);
                            }
                            finally {
                                if (requestStream != null)
                                {
                                    requestStream.Close();
                                }
                            }
                        }
                    }
                }
                response = GetWebResponse(request);
                Stream responseStream = null;
                if (response.ContentLength != 0)
                {
                    responseStream = response.GetResponseStream();
                }

                return(ReadResponse(method, response, responseStream));
            }
            finally {
                if (request == PendingSyncRequest)
                {
                    PendingSyncRequest = null;
                }
            }
        }
Beispiel #11
0
        protected object Invoke(string methodName, string requestUrl, object[] parameters)
        {
            WebResponse         webResponse = null;
            object              obj2;
            HttpClientMethod    clientMethod    = this.GetClientMethod(methodName);
            MimeParameterWriter parameterWriter = this.GetParameterWriter(clientMethod);
            Uri uri = new Uri(requestUrl);

            if (parameterWriter != null)
            {
                parameterWriter.RequestEncoding = base.RequestEncoding;
                requestUrl = parameterWriter.GetRequestUrl(uri.AbsoluteUri, parameters);
                uri        = new Uri(requestUrl, true);
            }
            WebRequest webRequest = null;

            try
            {
                webRequest = this.GetWebRequest(uri);
                base.NotifyClientCallOut(webRequest);
                base.PendingSyncRequest = webRequest;
                if (parameterWriter != null)
                {
                    parameterWriter.InitializeRequest(webRequest, parameters);
                    if (parameterWriter.UsesWriteRequest)
                    {
                        if (parameters.Length == 0)
                        {
                            webRequest.ContentLength = 0L;
                        }
                        else
                        {
                            Stream requestStream = null;
                            try
                            {
                                requestStream = webRequest.GetRequestStream();
                                parameterWriter.WriteRequest(requestStream, parameters);
                            }
                            finally
                            {
                                if (requestStream != null)
                                {
                                    requestStream.Close();
                                }
                            }
                        }
                    }
                }
                webResponse = this.GetWebResponse(webRequest);
                Stream responseStream = null;
                if (webResponse.ContentLength != 0L)
                {
                    responseStream = webResponse.GetResponseStream();
                }
                obj2 = this.ReadResponse(clientMethod, webResponse, responseStream);
            }
            finally
            {
                if (webRequest == base.PendingSyncRequest)
                {
                    base.PendingSyncRequest = null;
                }
            }
            return(obj2);
        }