Ejemplo n.º 1
0
        public override ServiceContextInfo GetServiceContextInfo()
        {
            var windowsIdentity = System.Security.Principal.WindowsIdentity.GetCurrent();
            var contextinfo     = new DefaultServiceContextInfo()
            {
                ClientIp = System.Environment.MachineName
            };

            if (windowsIdentity != null)
            {
                contextinfo.UserId = windowsIdentity.Name;
            }
            return(contextinfo);
        }
Ejemplo n.º 2
0
        public object BeforeSendRequest(ref Message request, IClientChannel channel)
        {
            if (request == null)
            {
                throw new ArgumentNullException("request");
            }
            // Service Runtime'a gececek olan kullanici, ip vs. gibi degerler bir header olarak request'e eklenecek.
            MessageBuffer      buffer      = request.CreateBufferedCopy(request.ToString().Length);
            Message            tRequest    = buffer.CreateMessage();
            ServiceContextInfo contextInfo = null;

            var containsMessageHeader = false;

            if (OperationContext.Current != null && OperationContext.Current.IncomingMessageHeaders != null)
            {
                int contextHeaderIndex = OperationContext.Current.IncomingMessageHeaders.FindHeader(ServiceBase.ContextDataKey, ServiceBase.ContextDataNamespaceKey);
                if (contextHeaderIndex >= 0)
                {
                    //contextInfo = OperationContext.Current.IncomingMessageHeaders.GetHeader<DefaultServiceContextInfo>(contextHeaderIndex);
                    var typeFinder         = EngineContext.Current.Resolve <ITypeFinder>();
                    var contextInfos       = typeFinder.FindClassesOfType <ServiceContextInfo>().ToList();
                    var currentContextInfo = contextInfos.Count() == 1
                                                          ? contextInfos[0]
                                                          : contextInfos.FirstOrDefault(
                        t => !(t == typeof(DefaultServiceContextInfo)));
                    using (XmlDictionaryReader reader = OperationContext.Current.IncomingMessageHeaders.GetReaderAtHeader(contextHeaderIndex))
                    {
                        MessageHeaderInfo headerInfo = OperationContext.Current.IncomingMessageHeaders[contextHeaderIndex];
                        var serializer = new DataContractSerializer(currentContextInfo.UnderlyingSystemType, headerInfo.Name, headerInfo.Namespace, null, int.MaxValue, false, false, null);
                        contextInfo = serializer.ReadObject(reader) as ServiceContextInfo;
                    }

                    containsMessageHeader = true;
                }
            }
            if (!containsMessageHeader)
            {
                if (_currentContextInfoProviderType == null)
                {
                    var typeFinder           = EngineContext.Current.Resolve <ITypeFinder>();
                    var contextInfoProviders = typeFinder.FindClassesOfType <ServiceContextInfoProvider>().ToList();
                    _currentContextInfoProviderType = contextInfoProviders.Count() == 1
                                                          ? contextInfoProviders[0]
                                                          : contextInfoProviders.FirstOrDefault(
                        t => !(t == typeof(DefaultServiceContextInfoProvider)));
                }

                if (_currentContextInfoProviderType == null)
                {
                    _currentContextInfoProviderType = typeof(DefaultServiceContextInfoProvider);
                }
                var contextInfoProvider =
                    Activator.CreateInstance(_currentContextInfoProviderType) as ServiceContextInfoProvider;
                if (contextInfoProvider != null)
                {
                    contextInfo = contextInfoProvider.GetServiceContextInfo();
                }

                if (contextInfo == null) //default
                {
                    contextInfo = new DefaultServiceContextInfo();
                }
                contextInfo.ClientIp = "127.0.0.1";
            }

            MessageHeader header = null;

            // ---------------------------------------------------------------------------------------------------------------------------------
            header = MessageHeader.CreateHeader(ServiceBase.ContextDataKey, ServiceBase.ContextDataNamespaceKey, contextInfo);
            tRequest.Headers.Add(header);

            ClientComputerInfo clientcomputerInfo = null;

            containsMessageHeader = false;
            if (OperationContext.Current != null && OperationContext.Current.IncomingMessageHeaders != null)
            {
                int contextHeaderIndex = OperationContext.Current.IncomingMessageHeaders.FindHeader(ServiceBase.ClientComputerInfoKey, ServiceBase.ClientComputerInfoNamespaceKey);
                if (contextHeaderIndex >= 0)
                {
                    clientcomputerInfo    = OperationContext.Current.IncomingMessageHeaders.GetHeader <ClientComputerInfo>(contextHeaderIndex);
                    containsMessageHeader = true;
                }
            }
            if (!containsMessageHeader)
            {
                //istek yapilan yerde bu kullanilacak
                clientcomputerInfo = new ClientComputerInfo()
                {
                    ClientComputerName      = System.Net.Dns.GetHostName(),
                    ClientComputerIpAddress = ServiceBase.GetLocalIPAddress()
                };
            }

            header = MessageHeader.CreateHeader(ServiceBase.ClientComputerInfoKey, ServiceBase.ClientComputerInfoNamespaceKey, clientcomputerInfo);
            tRequest.Headers.Add(header);

            request = tRequest;
            buffer.Close();
            return(null);
        }