protected IAsyncResult BeginInvoke (string methodName, object[] parameters, AsyncCallback callback, object asyncState)
		{
			SoapMethodStubInfo msi = (SoapMethodStubInfo) type_info.GetMethod (methodName);

			SoapWebClientAsyncResult ainfo = null;
			try
			{
				SoapClientMessage message = new SoapClientMessage (this, msi, Url, parameters);
				message.CollectHeaders (this, message.MethodStubInfo.Headers, SoapHeaderDirection.In);
				
				WebRequest request = GetRequestForMessage (uri, message);
				
				ainfo = new SoapWebClientAsyncResult (request, callback, asyncState);
				ainfo.Message = message;
				ainfo.Extensions = SoapExtension.CreateExtensionChain (type_info.SoapExtensions[0], msi.SoapExtensions, type_info.SoapExtensions[1]);

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

			return ainfo;
		}
Пример #2
0
        protected IAsyncResult BeginInvoke(string methodName, object[] parameters, AsyncCallback callback, object asyncState)
        {
            SoapMethodStubInfo msi = (SoapMethodStubInfo)type_info.GetMethod(methodName);

            SoapWebClientAsyncResult ainfo = null;

            try
            {
                SoapClientMessage message = new SoapClientMessage(this, msi, Url, parameters);
                message.CollectHeaders(this, message.MethodStubInfo.Headers, SoapHeaderDirection.In);

                WebRequest request = GetRequestForMessage(uri, message);

                ainfo            = new SoapWebClientAsyncResult(request, callback, asyncState);
                ainfo.Message    = message;
                ainfo.Extensions = SoapExtension.CreateExtensionChain(type_info.SoapExtensions[0], msi.SoapExtensions, type_info.SoapExtensions[1]);

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

            return(ainfo);
        }
Пример #3
0
        protected object[] EndInvoke(IAsyncResult asyncResult)
        {
            if (!(asyncResult is SoapWebClientAsyncResult))
            {
                throw new ArgumentException("asyncResult is not the return value from BeginInvoke");
            }

            SoapWebClientAsyncResult ainfo = (SoapWebClientAsyncResult)asyncResult;

            lock (ainfo)
            {
                if (!ainfo.IsCompleted)
                {
                    ainfo.WaitForComplete();
                }

                UnregisterMapping(ainfo.AsyncState);

                if (ainfo.Exception != null)
                {
                    throw ainfo.Exception;
                }
                else
                {
                    return((object[])ainfo.Result);
                }
            }
        }
Пример #4
0
        void AsyncGetResponseDone(IAsyncResult ar)
        {
            SoapWebClientAsyncResult ainfo = (SoapWebClientAsyncResult)ar.AsyncState;
            WebResponse response           = null;

            try {
                response = GetWebResponse(ainfo.Request, ar);
            }
            catch (WebException ex) {
                response = ex.Response;
                HttpWebResponse http_response = response as HttpWebResponse;
                if (http_response == null || http_response.StatusCode != HttpStatusCode.InternalServerError)
                {
                    ainfo.SetCompleted(null, ex, true);
                    return;
                }
            }
            catch (Exception ex) {
                ainfo.SetCompleted(null, ex, true);
                return;
            }

            try {
                object[] result = ReceiveResponse(response, ainfo.Message, ainfo.Extensions);
                ainfo.SetCompleted(result, null, true);
            }
            catch (Exception ex) {
                ainfo.SetCompleted(null, ex, true);
            }
            finally {
                response.Close();
            }
        }
Пример #5
0
        void AsyncGetRequestStreamDone(IAsyncResult ar)
        {
            SoapWebClientAsyncResult ainfo = (SoapWebClientAsyncResult)ar.AsyncState;

            try
            {
                SendRequest(ainfo.Request.EndGetRequestStream(ar), ainfo.Message, ainfo.Extensions);
                ainfo.Request.BeginGetResponse(new AsyncCallback(AsyncGetResponseDone), ainfo);
            }
            catch (Exception ex)
            {
                ainfo.SetCompleted(null, ex, true);
            }
        }
Пример #6
0
        void InvokeAsyncCallback(IAsyncResult ar)
        {
            InvokeAsyncInfo          info = (InvokeAsyncInfo)ar.AsyncState;
            SoapWebClientAsyncResult sar  = (SoapWebClientAsyncResult)ar;
            InvokeCompletedEventArgs args = new InvokeCompletedEventArgs(sar.Exception, false, info.UserState, (object[])sar.Result);

            if (info.Context != null)
            {
                info.Context.Send(info.Callback, args);
            }
            else
            {
                info.Callback(args);
            }
        }