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)); }
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; } }
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); }
public void OnCalled(ProxyContext ctx) { this.Called?.Invoke(ctx); }
public void OnResultHandling(ProxyContext ctx, IAOPResult result) { this.ResultHandling?.Invoke(ctx, result); }
public void OnRequest(ProxyContext ctx) { this.Request?.Invoke(ctx); }
public void OnCalling(ProxyContext ctx) { this.Calling?.Invoke(ctx); }
protected override object ResponseHandle(ProxyContext ctx, HttpWebResponse response) { return(ElapseTime("ResponseHandle`2", () => base.ResponseHandle(ctx, response))); }
protected override void PrepareRequest(ProxyContext ctx) { ElapseTime("PrepareRequest", () => base.PrepareRequest(ctx)); }