Beispiel #1
0
        protected virtual object ResponseHandle(ProxyContext ctx, HttpWebResponse response)
        {
            var stream = response.GetResponseStream();

            if (stream == null)
            {
                throw new RemotingException(-1, "Server No Response");
            }
            var serializer = ctx.Serializer;
            var aop        = (IAOPResult)serializer.Deserialize(stream, typeof(AOPResult), null);

            if (aop == null)
            {
                throw new RemotingException(-2, "Unexpected Response");
            }
            if (this.ResultHandling != null)
            {
                this.ResultHandling(ctx, aop);
            }
            if (ctx.ResultInitialized)
            {
                return(ctx.ResultValue);
            }
            var methodInfo = (MethodInfo)ctx.MethodCallMessage.MethodBase;
            var returnType = methodInfo.ReturnType;

            return(this.ResultHandle(aop, returnType, serializer));
        }
Beispiel #2
0
        private void OnRequest(ProxyContext ctx)
        {
            if (ctx.ExpectedReturnType != null)
            {
                return;
            }
            var name = $"{ctx.ProxyInstance.ProxyType}.{ctx.CallMethod.Name}";

            if (this.returnTypes.TryGetValue(name, out var type))
            {
                ctx.ExpectedReturnType = type;
            }
        }
Beispiel #3
0
        protected virtual object Call(IDictionary <string, object> parameters, IMethodCallMessage methodMessage)
        {
            var serializer = SerializerFactory.Current.GetSerializer(this.ContentType) ?? SerializerFactory.Current.Default;
            var ctx        = new ProxyContext {
                ProxyInstance     = this,
                Serializer        = serializer,
                MethodCallMessage = methodMessage,
                Parameters        = parameters
            };

            if (this.Calling != null)
            {
                this.Calling(ctx);
            }
            if (ctx.ResultInitialized)
            {
                return(ctx.ResultValue);
            }
            var url     = this.url + "/" + methodMessage.MethodName;
            var request = (HttpWebRequest)WebRequest.Create(url);

            this.PrepareRequest(request, serializer, parameters, methodMessage);
            object returnValue;
            var    response = (HttpWebResponse)request.GetResponse();

            if (response.StatusCode == HttpStatusCode.OK)
            {
                returnValue = this.ResponseHandle(ctx, response);
            }
            else
            {
                throw new RemotingException(-1, string.Format("Server Error: {0}/{1}", response.StatusCode, response.StatusDescription));
            }
            if (this.Called != null)
            {
                this.Called(ctx);
                if (ctx.ResultInitialized)
                {
                    returnValue = ctx.ResultValue;
                }
            }
            return(returnValue);
        }
Beispiel #4
0
 public void OnCalled(ProxyContext ctx)
 {
     this.Called?.Invoke(ctx);
 }
Beispiel #5
0
 public void OnResultHandling(ProxyContext ctx, IAOPResult result)
 {
     this.ResultHandling?.Invoke(ctx, result);
 }
Beispiel #6
0
 public void OnRequest(ProxyContext ctx)
 {
     this.Request?.Invoke(ctx);
 }
Beispiel #7
0
 public void OnCalling(ProxyContext ctx)
 {
     this.Calling?.Invoke(ctx);
 }
Beispiel #8
0
 protected override object ResponseHandle(ProxyContext ctx, HttpWebResponse response)
 {
     return(ElapseTime("ResponseHandle`2", () => base.ResponseHandle(ctx, response)));
 }
Beispiel #9
0
 protected override void PrepareRequest(ProxyContext ctx)
 {
     ElapseTime("PrepareRequest", () => base.PrepareRequest(ctx));
 }