protected void PostInvoke(object[] inputs, object returnedValue, object[] outputs, Exception exception) { try { #if DEBUG if (exception == null) { Console.WriteLine("End invoke:" + OperationContext.Current.GetCurrentOperationDescription().SyncMethod.Name); } Console.WriteLine("ElapsedMilliseconds:" + sw.ElapsedMilliseconds); #endif var results = new List <string>(); results.Add(returnedValue.ToString()); results.AddRange(outputs.Select(o => o.ToString()).ToList()); var logSetting = WcfSettingManager.CurrentServerSetting(OperationContext.Current.GetCurrentServiceDescription().ServiceType).WcfLogSetting; if (logSetting.Enabled && logSetting.InvokeInfoSetting.Enabled) { var log = WcfLogProvider.GetServerInvokeInfo( "OperationInvoker.PostInvoke", sw.ElapsedMilliseconds, exception == null ? true : false, OperationContext.Current.GetCurrentOperationDescription().SyncMethod.Name, ServerApplicationContext.Current, inputs.Select(i => i.ToString()).ToList(), results); WcfServiceLocator.GetLogService().LogWithoutException(log); } } catch (Exception ex) { LocalLogService.Log(ex.ToString()); } }
public void BeforeSendReply(ref Message reply, object correlationState) { try { var clientContext = new ClientApplicationContext(); clientContext.ServerMachineName = WcfLogProvider.MachineName; clientContext.RequestIdentity = ServerApplicationContext.Current.RequestIdentity; clientContext.ServerExceptionID = ServerApplicationContext.Current.ServerExceptionID ?? ""; var serviceType = OperationContext.Current.GetCurrentServiceDescription().ServiceType; if (!serviceVersionCache.ContainsKey(serviceType.FullName)) { lock (locker) { if (!serviceVersionCache.ContainsKey(serviceType.FullName)) { serviceVersionCache.Add(serviceType.FullName, serviceType.Assembly.GetName().Version.ToString()); } } } clientContext.ServerVersion = serviceVersionCache[serviceType.FullName]; reply.SetApplicationContext(clientContext); #if DEBUG var message = reply.ToString(); Console.WriteLine("Server send message:" + message); #endif var setting = WcfSettingManager.CurrentServerSetting(OperationContext.Current.GetCurrentServiceDescription().ServiceType); var securitySetting = setting.WcfSecuritySetting; if (securitySetting.PasswordCheck.Enable) { if (securitySetting.PasswordCheck.Direction == OperationDirection.Both || securitySetting.PasswordCheck.Direction == OperationDirection.Reply) { clientContext.Password = securitySetting.PasswordCheck.Password; } } var logSetting = setting.WcfLogSetting; if (logSetting.Enabled && logSetting.MessageInfoSetting.Enabled) { var direct = logSetting.MessageInfoSetting.MessageDirection; if (direct == MessageDirection.Both || direct == MessageDirection.Send) { var log = WcfLogProvider.GetServerMessageInfo( "ServerMessageInspector.BeforeSendReply", MessageDirection.Send, reply.ToString()); WcfServiceLocator.GetLogService().LogWithoutException(log); } } } catch (Exception ex) { LocalLogService.Log(ex.ToString()); } }
public object AfterReceiveRequest(ref Message request, IClientChannel channel, InstanceContext instanceContext) { #if DEBUG var message = request.ToString(); Console.WriteLine("Server got message:" + message); #endif ServerApplicationContext.Current = request.GetApplicationContext <ServerApplicationContext>(); try { var setting = WcfSettingManager.CurrentServerSetting(OperationContext.Current.GetCurrentServiceDescription().ServiceType); var logSetting = setting.WcfLogSetting; if (logSetting.Enabled && logSetting.MessageInfoSetting.Enabled) { var direct = logSetting.MessageInfoSetting.MessageDirection; if (direct == MessageDirection.Both || direct == MessageDirection.Receive) { var log = WcfLogProvider.GetServerMessageInfo( "ServerMessageInspector.AfterReceiveRequest", MessageDirection.Receive, request.ToString()); WcfServiceLocator.GetLogService().LogWithoutException(log); } } var securitySetting = setting.WcfSecuritySetting; if (securitySetting.PasswordCheck.Enable) { if (securitySetting.PasswordCheck.Direction == OperationDirection.Both || securitySetting.PasswordCheck.Direction == OperationDirection.Request) { if (ServerApplicationContext.Current.Password != securitySetting.PasswordCheck.Password) { throw new WcfSecurityException("PasswordCheck failed in request!"); } } } } catch (Exception ex) { LocalLogService.Log(ex.ToString()); if (ex is WcfSecurityException) { throw; } } return(null); }
public bool HandleError(Exception error) { try { #if DEBUG Console.WriteLine("Exception in service! Message:{0}, id : {1}", error.Message, error.Data["id"]); #endif var logSetting = WcfSettingManager.CurrentServerSetting(OperationContext.Current.GetCurrentServiceDescription().ServiceType).WcfLogSetting; if (logSetting.Enabled && logSetting.ExceptionInfoSetting.Enabled) { var exceptionID = error.Data["id"].ToString(); var log = WcfLogProvider.GetServerExceptionInfo("ErrorHandler.HandleErrer", error); log.ID = exceptionID; WcfServiceLocator.GetLogService().LogWithoutException(log); } } catch (Exception ex) { LocalLogService.Log(ex.ToString()); } return(true); }
public static ServiceHost CreateServiceHost(Type serviceType) { string typeName = serviceType.FullName; var serviceHost = new ServiceHost(serviceType); if (!typeof(IWcfConfigService).IsAssignableFrom(serviceType) && !typeof(IWcfLogService).IsAssignableFrom(serviceType)) { WcfSettingManager.Init(serviceType); if (serviceHost.Description.Behaviors.Find <ServiceErrorBehavior>() == null) { serviceHost.Description.Behaviors.Add(new ServiceErrorBehavior()); } if (serviceHost.Description.Behaviors.Find <ActionInterceptBehavior>() == null) { serviceHost.Description.Behaviors.Add(new ActionInterceptBehavior()); } if (WcfSettingManager.CurrentServerSetting(serviceType).WcfCoreSetting.EnableUnity) { if (serviceHost.Description.Behaviors.Find <UnityServiceBehavior>() == null) { serviceHost.Description.Behaviors.Add(new UnityServiceBehavior()); } } serviceHost.Description.Endpoints.Clear(); var wcfService = GetWcfServiceConfiguration(serviceType); if (wcfService == null) { throw new Exception("Can not locate any Wcf service, please check metadata config!"); } var bindingCache = new Dictionary <string, Binding>(); foreach (var ep in wcfService.Endpoints) { string address = ConfigHelper.CreateAddress( ep.EndpointProtocol, Environment.MachineName, ep.EndpointPort, ep.EndpointName); Binding binding; if (!bindingCache.TryGetValue(address, out binding)) { binding = ConfigHelper.CreateBinding(ep.EndpointBindingType, ep.EndpointBindingXml); bindingCache[address] = binding; } serviceHost.AddServiceEndpoint(ep.ServiceContractType, binding, address); if (!string.IsNullOrEmpty(ep.EndpointBehaviorXml)) { AddEndPointBehavior(serviceHost.Description.Endpoints.Last(), ep.EndpointBehaviorXml); } } foreach (var ep in serviceHost.Description.Endpoints) { ep.Behaviors.Add(new MessageInspectorEndpointBehavior()); } if (!string.IsNullOrEmpty(wcfService.ServiceBehaviorXml)) { AddServiceBehavior(serviceHost, wcfService.ServiceBehaviorXml); } serviceHost.Opened += (sender, o) => { if (WcfSettingManager.CurrentServerSetting(serviceType).WcfLogSetting.StartInfoSetting.Enabled) { var log = WcfLogProvider.GetServerStartInfo(serviceType.FullName, "WcfServiceHostFactory.CreateServiceHost", wcfService); WcfServiceLocator.GetLogService().LogWithoutException(log); } }; } return(serviceHost); }