586 lines
		
	
	
		
			23 KiB
		
	
	
	
		
			C#
		
	
	
	
		
		
			
		
	
	
			586 lines
		
	
	
		
			23 KiB
		
	
	
	
		
			C#
		
	
	
	
| 
								 | 
							
								//------------------------------------------------------------------------------
							 | 
						|||
| 
								 | 
							
								// <auto-generated>
							 | 
						|||
| 
								 | 
							
								//     此代码由工具生成。
							 | 
						|||
| 
								 | 
							
								//     运行时版本:2.0.50727.8806
							 | 
						|||
| 
								 | 
							
								//
							 | 
						|||
| 
								 | 
							
								//     对此文件的更改可能会导致不正确的行为,并且如果
							 | 
						|||
| 
								 | 
							
								//     重新生成代码,这些更改将会丢失。
							 | 
						|||
| 
								 | 
							
								// </auto-generated>
							 | 
						|||
| 
								 | 
							
								//------------------------------------------------------------------------------
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								namespace Microsoft.Tools.ServiceModel
							 | 
						|||
| 
								 | 
							
								{
							 | 
						|||
| 
								 | 
							
								    
							 | 
						|||
| 
								 | 
							
								    
							 | 
						|||
| 
								 | 
							
								    [System.Diagnostics.DebuggerStepThroughAttribute()]
							 | 
						|||
| 
								 | 
							
								    [System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.Tools.ServiceModel.NetCFSvcUtil", "3.5.0.0")]
							 | 
						|||
| 
								 | 
							
								    public class CFClientBase<TChannel>
							 | 
						|||
| 
								 | 
							
								        where TChannel :  class
							 | 
						|||
| 
								 | 
							
								    {
							 | 
						|||
| 
								 | 
							
								        
							 | 
						|||
| 
								 | 
							
								        private System.ServiceModel.Channels.Binding binding;
							 | 
						|||
| 
								 | 
							
								        
							 | 
						|||
| 
								 | 
							
								        private System.ServiceModel.Channels.CustomBinding oneWayBinding;
							 | 
						|||
| 
								 | 
							
								        
							 | 
						|||
| 
								 | 
							
								        private System.ServiceModel.Channels.IChannelFactory<System.ServiceModel.Channels.IRequestChannel> _requestChannelFactory;
							 | 
						|||
| 
								 | 
							
								        
							 | 
						|||
| 
								 | 
							
								        private System.ServiceModel.Channels.IChannelFactory<System.ServiceModel.Channels.IOutputChannel> _outputChannelFactory;
							 | 
						|||
| 
								 | 
							
								        
							 | 
						|||
| 
								 | 
							
								        private System.ServiceModel.Description.ClientCredentials _clientCredentials;
							 | 
						|||
| 
								 | 
							
								        
							 | 
						|||
| 
								 | 
							
								        private System.ServiceModel.EndpointAddress remoteAddress;
							 | 
						|||
| 
								 | 
							
								        
							 | 
						|||
| 
								 | 
							
								        private System.ServiceModel.Channels.BindingParameterCollection _parameters;
							 | 
						|||
| 
								 | 
							
								        
							 | 
						|||
| 
								 | 
							
								        private object requestChannelFactorySyncObject;
							 | 
						|||
| 
								 | 
							
								        
							 | 
						|||
| 
								 | 
							
								        private object outputChannelFactorySyncObject;
							 | 
						|||
| 
								 | 
							
								        
							 | 
						|||
| 
								 | 
							
								        private System.Collections.Generic.Dictionary<CFContractSerializerInfo, System.Runtime.Serialization.XmlObjectSerializer> serializers = new System.Collections.Generic.Dictionary<CFContractSerializerInfo, System.Runtime.Serialization.XmlObjectSerializer>(2);
							 | 
						|||
| 
								 | 
							
								        
							 | 
						|||
| 
								 | 
							
								        public CFClientBase(System.ServiceModel.Channels.Binding binding, System.ServiceModel.EndpointAddress remoteAddress)
							 | 
						|||
| 
								 | 
							
								        {
							 | 
						|||
| 
								 | 
							
								            if ((binding == null))
							 | 
						|||
| 
								 | 
							
								            {
							 | 
						|||
| 
								 | 
							
								                throw new System.ArgumentNullException("binding");
							 | 
						|||
| 
								 | 
							
								            }
							 | 
						|||
| 
								 | 
							
								            if ((remoteAddress == null))
							 | 
						|||
| 
								 | 
							
								            {
							 | 
						|||
| 
								 | 
							
								                throw new System.ArgumentNullException("remoteAddress");
							 | 
						|||
| 
								 | 
							
								            }
							 | 
						|||
| 
								 | 
							
								            this.remoteAddress = remoteAddress;
							 | 
						|||
| 
								 | 
							
								            this.binding = binding;
							 | 
						|||
| 
								 | 
							
								            this._clientCredentials = new System.ServiceModel.Description.ClientCredentials();
							 | 
						|||
| 
								 | 
							
								            this._parameters = new System.ServiceModel.Channels.BindingParameterCollection();
							 | 
						|||
| 
								 | 
							
								            this._parameters.Add(this._clientCredentials);
							 | 
						|||
| 
								 | 
							
								            this.outputChannelFactorySyncObject = new object();
							 | 
						|||
| 
								 | 
							
								            this.requestChannelFactorySyncObject = new object();
							 | 
						|||
| 
								 | 
							
								        }
							 | 
						|||
| 
								 | 
							
								        
							 | 
						|||
| 
								 | 
							
								        public System.ServiceModel.Description.ClientCredentials ClientCredentials
							 | 
						|||
| 
								 | 
							
								        {
							 | 
						|||
| 
								 | 
							
								            get
							 | 
						|||
| 
								 | 
							
								            {
							 | 
						|||
| 
								 | 
							
								                return this._clientCredentials;
							 | 
						|||
| 
								 | 
							
								            }
							 | 
						|||
| 
								 | 
							
								        }
							 | 
						|||
| 
								 | 
							
								        
							 | 
						|||
| 
								 | 
							
								        protected System.ServiceModel.Channels.BindingParameterCollection Parameters
							 | 
						|||
| 
								 | 
							
								        {
							 | 
						|||
| 
								 | 
							
								            get
							 | 
						|||
| 
								 | 
							
								            {
							 | 
						|||
| 
								 | 
							
								                return this._parameters;
							 | 
						|||
| 
								 | 
							
								            }
							 | 
						|||
| 
								 | 
							
								        }
							 | 
						|||
| 
								 | 
							
								        
							 | 
						|||
| 
								 | 
							
								        private System.ServiceModel.Channels.IChannelFactory<System.ServiceModel.Channels.IOutputChannel> OutputChannelFactory
							 | 
						|||
| 
								 | 
							
								        {
							 | 
						|||
| 
								 | 
							
								            get
							 | 
						|||
| 
								 | 
							
								            {
							 | 
						|||
| 
								 | 
							
								                if ((this._outputChannelFactory == null))
							 | 
						|||
| 
								 | 
							
								                {
							 | 
						|||
| 
								 | 
							
								                    System.Threading.Monitor.Enter(this.outputChannelFactorySyncObject);
							 | 
						|||
| 
								 | 
							
								                    try
							 | 
						|||
| 
								 | 
							
								                    {
							 | 
						|||
| 
								 | 
							
								                        if ((this._outputChannelFactory == null))
							 | 
						|||
| 
								 | 
							
								                        {
							 | 
						|||
| 
								 | 
							
								                            if ((this.oneWayBinding == null))
							 | 
						|||
| 
								 | 
							
								                            {
							 | 
						|||
| 
								 | 
							
								                                this.oneWayBinding = new System.ServiceModel.Channels.CustomBinding(this.binding);
							 | 
						|||
| 
								 | 
							
								                            }
							 | 
						|||
| 
								 | 
							
								                            if (this.oneWayBinding.CanBuildChannelFactory<System.ServiceModel.Channels.IOutputChannel>(this.Parameters))
							 | 
						|||
| 
								 | 
							
								                            {
							 | 
						|||
| 
								 | 
							
								                                this._outputChannelFactory = this.oneWayBinding.BuildChannelFactory<System.ServiceModel.Channels.IOutputChannel>(this.Parameters);
							 | 
						|||
| 
								 | 
							
								                                this._outputChannelFactory.Open();
							 | 
						|||
| 
								 | 
							
								                            }
							 | 
						|||
| 
								 | 
							
								                        }
							 | 
						|||
| 
								 | 
							
								                    }
							 | 
						|||
| 
								 | 
							
								                    finally
							 | 
						|||
| 
								 | 
							
								                    {
							 | 
						|||
| 
								 | 
							
								                        System.Threading.Monitor.Exit(this.outputChannelFactorySyncObject);
							 | 
						|||
| 
								 | 
							
								                    }
							 | 
						|||
| 
								 | 
							
								                }
							 | 
						|||
| 
								 | 
							
								                return this._outputChannelFactory;
							 | 
						|||
| 
								 | 
							
								            }
							 | 
						|||
| 
								 | 
							
								        }
							 | 
						|||
| 
								 | 
							
								        
							 | 
						|||
| 
								 | 
							
								        private System.ServiceModel.Channels.IChannelFactory<System.ServiceModel.Channels.IRequestChannel> RequestChannelFactory
							 | 
						|||
| 
								 | 
							
								        {
							 | 
						|||
| 
								 | 
							
								            get
							 | 
						|||
| 
								 | 
							
								            {
							 | 
						|||
| 
								 | 
							
								                if ((this._requestChannelFactory == null))
							 | 
						|||
| 
								 | 
							
								                {
							 | 
						|||
| 
								 | 
							
								                    System.Threading.Monitor.Enter(this.requestChannelFactorySyncObject);
							 | 
						|||
| 
								 | 
							
								                    try
							 | 
						|||
| 
								 | 
							
								                    {
							 | 
						|||
| 
								 | 
							
								                        if ((this._requestChannelFactory == null))
							 | 
						|||
| 
								 | 
							
								                        {
							 | 
						|||
| 
								 | 
							
								                            if (this.binding.CanBuildChannelFactory<System.ServiceModel.Channels.IRequestChannel>(this.Parameters))
							 | 
						|||
| 
								 | 
							
								                            {
							 | 
						|||
| 
								 | 
							
								                                this._requestChannelFactory = this.binding.BuildChannelFactory<System.ServiceModel.Channels.IRequestChannel>(this.Parameters);
							 | 
						|||
| 
								 | 
							
								                                this._requestChannelFactory.Open();
							 | 
						|||
| 
								 | 
							
								                            }
							 | 
						|||
| 
								 | 
							
								                        }
							 | 
						|||
| 
								 | 
							
								                    }
							 | 
						|||
| 
								 | 
							
								                    finally
							 | 
						|||
| 
								 | 
							
								                    {
							 | 
						|||
| 
								 | 
							
								                        System.Threading.Monitor.Exit(this.requestChannelFactorySyncObject);
							 | 
						|||
| 
								 | 
							
								                    }
							 | 
						|||
| 
								 | 
							
								                }
							 | 
						|||
| 
								 | 
							
								                return this._requestChannelFactory;
							 | 
						|||
| 
								 | 
							
								            }
							 | 
						|||
| 
								 | 
							
								        }
							 | 
						|||
| 
								 | 
							
								        
							 | 
						|||
| 
								 | 
							
								        protected static void ApplyProtection(string action, System.ServiceModel.Security.ScopedMessagePartSpecification parts, bool protection)
							 | 
						|||
| 
								 | 
							
								        {
							 | 
						|||
| 
								 | 
							
								            System.ServiceModel.Security.MessagePartSpecification partSpec;
							 | 
						|||
| 
								 | 
							
								            if (protection)
							 | 
						|||
| 
								 | 
							
								            {
							 | 
						|||
| 
								 | 
							
								                partSpec = new System.ServiceModel.Security.MessagePartSpecification(true);
							 | 
						|||
| 
								 | 
							
								            }
							 | 
						|||
| 
								 | 
							
								            else
							 | 
						|||
| 
								 | 
							
								            {
							 | 
						|||
| 
								 | 
							
								                partSpec = System.ServiceModel.Security.MessagePartSpecification.NoParts;
							 | 
						|||
| 
								 | 
							
								            }
							 | 
						|||
| 
								 | 
							
								            parts.AddParts(partSpec, action);
							 | 
						|||
| 
								 | 
							
								        }
							 | 
						|||
| 
								 | 
							
								        
							 | 
						|||
| 
								 | 
							
								        protected static bool IsSecureMessageBinding(System.ServiceModel.Channels.Binding binding)
							 | 
						|||
| 
								 | 
							
								        {
							 | 
						|||
| 
								 | 
							
								            if (typeof(System.ServiceModel.BasicHttpBinding).IsInstanceOfType(binding))
							 | 
						|||
| 
								 | 
							
								            {
							 | 
						|||
| 
								 | 
							
								                return false;
							 | 
						|||
| 
								 | 
							
								            }
							 | 
						|||
| 
								 | 
							
								            if (typeof(System.ServiceModel.Channels.CustomBinding).IsInstanceOfType(binding))
							 | 
						|||
| 
								 | 
							
								            {
							 | 
						|||
| 
								 | 
							
								                return ((System.ServiceModel.Channels.CustomBinding)(binding)).Elements.Contains(typeof(System.ServiceModel.Channels.AsymmetricSecurityBindingElement));
							 | 
						|||
| 
								 | 
							
								            }
							 | 
						|||
| 
								 | 
							
								            throw new System.NotSupportedException("Unsupported binding type.");
							 | 
						|||
| 
								 | 
							
								        }
							 | 
						|||
| 
								 | 
							
								        
							 | 
						|||
| 
								 | 
							
								        protected void Close()
							 | 
						|||
| 
								 | 
							
								        {
							 | 
						|||
| 
								 | 
							
								            if ((this.RequestChannelFactory != null))
							 | 
						|||
| 
								 | 
							
								            {
							 | 
						|||
| 
								 | 
							
								                System.Threading.Monitor.Enter(this.RequestChannelFactory);
							 | 
						|||
| 
								 | 
							
								                try
							 | 
						|||
| 
								 | 
							
								                {
							 | 
						|||
| 
								 | 
							
								                    this.RequestChannelFactory.Close();
							 | 
						|||
| 
								 | 
							
								                }
							 | 
						|||
| 
								 | 
							
								                finally
							 | 
						|||
| 
								 | 
							
								                {
							 | 
						|||
| 
								 | 
							
								                    System.Threading.Monitor.Exit(this.RequestChannelFactory);
							 | 
						|||
| 
								 | 
							
								                }
							 | 
						|||
| 
								 | 
							
								            }
							 | 
						|||
| 
								 | 
							
								            if ((this.OutputChannelFactory != null))
							 | 
						|||
| 
								 | 
							
								            {
							 | 
						|||
| 
								 | 
							
								                System.Threading.Monitor.Enter(this.OutputChannelFactory);
							 | 
						|||
| 
								 | 
							
								                try
							 | 
						|||
| 
								 | 
							
								                {
							 | 
						|||
| 
								 | 
							
								                    this.OutputChannelFactory.Close();
							 | 
						|||
| 
								 | 
							
								                }
							 | 
						|||
| 
								 | 
							
								                finally
							 | 
						|||
| 
								 | 
							
								                {
							 | 
						|||
| 
								 | 
							
								                    System.Threading.Monitor.Exit(this.OutputChannelFactory);
							 | 
						|||
| 
								 | 
							
								                }
							 | 
						|||
| 
								 | 
							
								            }
							 | 
						|||
| 
								 | 
							
								        }
							 | 
						|||
| 
								 | 
							
								        
							 | 
						|||
| 
								 | 
							
								        protected TRESPONSE Invoke<TREQUEST, TRESPONSE>(CFInvokeInfo info, TREQUEST request)
							 | 
						|||
| 
								 | 
							
								        
							 | 
						|||
| 
								 | 
							
								        
							 | 
						|||
| 
								 | 
							
								        {
							 | 
						|||
| 
								 | 
							
								            CFContractSerializerInfo serializerInfo = new CFContractSerializerInfo();
							 | 
						|||
| 
								 | 
							
								            serializerInfo.MessageContractType = typeof(TREQUEST);
							 | 
						|||
| 
								 | 
							
								            serializerInfo.IsWrapped = info.RequestIsWrapped;
							 | 
						|||
| 
								 | 
							
								            serializerInfo.ExtraTypes = info.ExtraTypes;
							 | 
						|||
| 
								 | 
							
								            serializerInfo.UseEncoded = info.UseEncoded;
							 | 
						|||
| 
								 | 
							
								            System.ServiceModel.Channels.Message msg = System.ServiceModel.Channels.Message.CreateMessage(this.binding.MessageVersion, info.Action, request, GetContractSerializer(serializerInfo));
							 | 
						|||
| 
								 | 
							
								            return this.getResult<TRESPONSE>(this.getReply(msg), info);
							 | 
						|||
| 
								 | 
							
								        }
							 | 
						|||
| 
								 | 
							
								        
							 | 
						|||
| 
								 | 
							
								        protected void Invoke<TREQUEST>(CFInvokeInfo info, TREQUEST request)
							 | 
						|||
| 
								 | 
							
								        
							 | 
						|||
| 
								 | 
							
								        {
							 | 
						|||
| 
								 | 
							
								            CFContractSerializerInfo serializerInfo = new CFContractSerializerInfo();
							 | 
						|||
| 
								 | 
							
								            serializerInfo.MessageContractType = typeof(TREQUEST);
							 | 
						|||
| 
								 | 
							
								            serializerInfo.IsWrapped = info.RequestIsWrapped;
							 | 
						|||
| 
								 | 
							
								            serializerInfo.ExtraTypes = info.ExtraTypes;
							 | 
						|||
| 
								 | 
							
								            serializerInfo.UseEncoded = info.UseEncoded;
							 | 
						|||
| 
								 | 
							
								            System.ServiceModel.Channels.Message msg = System.ServiceModel.Channels.Message.CreateMessage(this.binding.MessageVersion, info.Action, request, GetContractSerializer(serializerInfo));
							 | 
						|||
| 
								 | 
							
								            if (info.IsOneWay)
							 | 
						|||
| 
								 | 
							
								            {
							 | 
						|||
| 
								 | 
							
								                if ((this._outputChannelFactory != null))
							 | 
						|||
| 
								 | 
							
								                {
							 | 
						|||
| 
								 | 
							
								                    this.postOneWayMessage(msg);
							 | 
						|||
| 
								 | 
							
								                }
							 | 
						|||
| 
								 | 
							
								                else
							 | 
						|||
| 
								 | 
							
								                {
							 | 
						|||
| 
								 | 
							
								                    this.getReply(msg);
							 | 
						|||
| 
								 | 
							
								                }
							 | 
						|||
| 
								 | 
							
								            }
							 | 
						|||
| 
								 | 
							
								            else
							 | 
						|||
| 
								 | 
							
								            {
							 | 
						|||
| 
								 | 
							
								                this.processReply(this.getReply(msg));
							 | 
						|||
| 
								 | 
							
								            }
							 | 
						|||
| 
								 | 
							
								        }
							 | 
						|||
| 
								 | 
							
								        
							 | 
						|||
| 
								 | 
							
								        private void postOneWayMessage(System.ServiceModel.Channels.Message msg)
							 | 
						|||
| 
								 | 
							
								        {
							 | 
						|||
| 
								 | 
							
								            if ((this.OutputChannelFactory == null))
							 | 
						|||
| 
								 | 
							
								            {
							 | 
						|||
| 
								 | 
							
								                // transport doesn't support one-way messages
							 | 
						|||
| 
								 | 
							
								                throw new System.NotSupportedException();
							 | 
						|||
| 
								 | 
							
								            }
							 | 
						|||
| 
								 | 
							
								            System.ServiceModel.Channels.IOutputChannel outputChannel;
							 | 
						|||
| 
								 | 
							
								            System.Threading.Monitor.Enter(this.OutputChannelFactory);
							 | 
						|||
| 
								 | 
							
								            try
							 | 
						|||
| 
								 | 
							
								            {
							 | 
						|||
| 
								 | 
							
								                outputChannel = this.OutputChannelFactory.CreateChannel(this.remoteAddress);
							 | 
						|||
| 
								 | 
							
								            }
							 | 
						|||
| 
								 | 
							
								            finally
							 | 
						|||
| 
								 | 
							
								            {
							 | 
						|||
| 
								 | 
							
								                System.Threading.Monitor.Exit(this.OutputChannelFactory);
							 | 
						|||
| 
								 | 
							
								            }
							 | 
						|||
| 
								 | 
							
								            outputChannel.Open();
							 | 
						|||
| 
								 | 
							
								            try
							 | 
						|||
| 
								 | 
							
								            {
							 | 
						|||
| 
								 | 
							
								                outputChannel.Send(msg);
							 | 
						|||
| 
								 | 
							
								            }
							 | 
						|||
| 
								 | 
							
								            finally
							 | 
						|||
| 
								 | 
							
								            {
							 | 
						|||
| 
								 | 
							
								                outputChannel.Close();
							 | 
						|||
| 
								 | 
							
								            }
							 | 
						|||
| 
								 | 
							
								        }
							 | 
						|||
| 
								 | 
							
								        
							 | 
						|||
| 
								 | 
							
								        private System.ServiceModel.Channels.Message getReply(System.ServiceModel.Channels.Message msg)
							 | 
						|||
| 
								 | 
							
								        {
							 | 
						|||
| 
								 | 
							
								            if ((this.RequestChannelFactory == null))
							 | 
						|||
| 
								 | 
							
								            {
							 | 
						|||
| 
								 | 
							
								                // transport doesn't support requests
							 | 
						|||
| 
								 | 
							
								                throw new System.NotSupportedException();
							 | 
						|||
| 
								 | 
							
								            }
							 | 
						|||
| 
								 | 
							
								            System.ServiceModel.Channels.IRequestChannel requestChannel;
							 | 
						|||
| 
								 | 
							
								            System.Threading.Monitor.Enter(this.RequestChannelFactory);
							 | 
						|||
| 
								 | 
							
								            try
							 | 
						|||
| 
								 | 
							
								            {
							 | 
						|||
| 
								 | 
							
								                requestChannel = this.RequestChannelFactory.CreateChannel(this.remoteAddress);
							 | 
						|||
| 
								 | 
							
								            }
							 | 
						|||
| 
								 | 
							
								            finally
							 | 
						|||
| 
								 | 
							
								            {
							 | 
						|||
| 
								 | 
							
								                System.Threading.Monitor.Exit(this.RequestChannelFactory);
							 | 
						|||
| 
								 | 
							
								            }
							 | 
						|||
| 
								 | 
							
								            requestChannel.Open();
							 | 
						|||
| 
								 | 
							
								            try
							 | 
						|||
| 
								 | 
							
								            {
							 | 
						|||
| 
								 | 
							
								                return requestChannel.Request(msg);
							 | 
						|||
| 
								 | 
							
								            }
							 | 
						|||
| 
								 | 
							
								            finally
							 | 
						|||
| 
								 | 
							
								            {
							 | 
						|||
| 
								 | 
							
								                if ((requestChannel.State == System.ServiceModel.CommunicationState.Opened))
							 | 
						|||
| 
								 | 
							
								                {
							 | 
						|||
| 
								 | 
							
								                    requestChannel.Close();
							 | 
						|||
| 
								 | 
							
								                }
							 | 
						|||
| 
								 | 
							
								            }
							 | 
						|||
| 
								 | 
							
								        }
							 | 
						|||
| 
								 | 
							
								        
							 | 
						|||
| 
								 | 
							
								        private void processReply(System.ServiceModel.Channels.Message reply)
							 | 
						|||
| 
								 | 
							
								        {
							 | 
						|||
| 
								 | 
							
								            System.Diagnostics.Debug.Assert((reply != null));
							 | 
						|||
| 
								 | 
							
								            if (reply.IsFault)
							 | 
						|||
| 
								 | 
							
								            {
							 | 
						|||
| 
								 | 
							
								                System.Xml.XmlDictionaryReader reader = reply.GetReaderAtBodyContents();
							 | 
						|||
| 
								 | 
							
								                try
							 | 
						|||
| 
								 | 
							
								                {
							 | 
						|||
| 
								 | 
							
								                    throw new CFFaultException(reader.ReadOuterXml());
							 | 
						|||
| 
								 | 
							
								                }
							 | 
						|||
| 
								 | 
							
								                finally
							 | 
						|||
| 
								 | 
							
								                {
							 | 
						|||
| 
								 | 
							
								                    reader.Close();
							 | 
						|||
| 
								 | 
							
								                }
							 | 
						|||
| 
								 | 
							
								            }
							 | 
						|||
| 
								 | 
							
								        }
							 | 
						|||
| 
								 | 
							
								        
							 | 
						|||
| 
								 | 
							
								        protected virtual System.Runtime.Serialization.XmlObjectSerializer GetContractSerializer(CFContractSerializerInfo info)
							 | 
						|||
| 
								 | 
							
								        {
							 | 
						|||
| 
								 | 
							
								            System.Runtime.Serialization.XmlObjectSerializer serializer;
							 | 
						|||
| 
								 | 
							
								            System.Threading.Monitor.Enter(this.serializers);
							 | 
						|||
| 
								 | 
							
								            try
							 | 
						|||
| 
								 | 
							
								            {
							 | 
						|||
| 
								 | 
							
								                if (serializers.ContainsKey(info))
							 | 
						|||
| 
								 | 
							
								                {
							 | 
						|||
| 
								 | 
							
								                    serializer = this.serializers[info];
							 | 
						|||
| 
								 | 
							
								                }
							 | 
						|||
| 
								 | 
							
								                else
							 | 
						|||
| 
								 | 
							
								                {
							 | 
						|||
| 
								 | 
							
								                    serializer = new CFContractSerializer(info);
							 | 
						|||
| 
								 | 
							
								                    serializers[info] = serializer;
							 | 
						|||
| 
								 | 
							
								                }
							 | 
						|||
| 
								 | 
							
								            }
							 | 
						|||
| 
								 | 
							
								            finally
							 | 
						|||
| 
								 | 
							
								            {
							 | 
						|||
| 
								 | 
							
								                System.Threading.Monitor.Exit(this.serializers);
							 | 
						|||
| 
								 | 
							
								            }
							 | 
						|||
| 
								 | 
							
								            return serializer;
							 | 
						|||
| 
								 | 
							
								        }
							 | 
						|||
| 
								 | 
							
								        
							 | 
						|||
| 
								 | 
							
								        private TRESPONSE getResult<TRESPONSE>(System.ServiceModel.Channels.Message reply, CFInvokeInfo info)
							 | 
						|||
| 
								 | 
							
								        
							 | 
						|||
| 
								 | 
							
								        {
							 | 
						|||
| 
								 | 
							
								            System.Diagnostics.Debug.Assert((reply != null));
							 | 
						|||
| 
								 | 
							
								            this.processReply(reply);
							 | 
						|||
| 
								 | 
							
								            TRESPONSE retVal = default(TRESPONSE);
							 | 
						|||
| 
								 | 
							
								            if ((reply.IsEmpty == false))
							 | 
						|||
| 
								 | 
							
								            {
							 | 
						|||
| 
								 | 
							
								                CFContractSerializerInfo serializerInfo = new CFContractSerializerInfo();
							 | 
						|||
| 
								 | 
							
								                serializerInfo.MessageContractType = typeof(TRESPONSE);
							 | 
						|||
| 
								 | 
							
								                serializerInfo.IsWrapped = info.ResponseIsWrapped;
							 | 
						|||
| 
								 | 
							
								                serializerInfo.IsResponse = true;
							 | 
						|||
| 
								 | 
							
								                serializerInfo.ExtraTypes = info.ExtraTypes;
							 | 
						|||
| 
								 | 
							
								                serializerInfo.UseEncoded = info.UseEncoded;
							 | 
						|||
| 
								 | 
							
								                retVal = reply.GetBody<TRESPONSE>(this.GetContractSerializer(serializerInfo));
							 | 
						|||
| 
								 | 
							
								            }
							 | 
						|||
| 
								 | 
							
								            return retVal;
							 | 
						|||
| 
								 | 
							
								        }
							 | 
						|||
| 
								 | 
							
								        
							 | 
						|||
| 
								 | 
							
								        [System.Diagnostics.DebuggerStepThroughAttribute()]
							 | 
						|||
| 
								 | 
							
								        [System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.Tools.ServiceModel.NetCFSvcUtil", "3.5.0.0")]
							 | 
						|||
| 
								 | 
							
								        private class CFContractSerializer : System.Runtime.Serialization.XmlObjectSerializer
							 | 
						|||
| 
								 | 
							
								        {
							 | 
						|||
| 
								 | 
							
								            
							 | 
						|||
| 
								 | 
							
								            private CFContractSerializerInfo info;
							 | 
						|||
| 
								 | 
							
								            
							 | 
						|||
| 
								 | 
							
								            private System.Xml.Serialization.XmlSerializer serializer;
							 | 
						|||
| 
								 | 
							
								            
							 | 
						|||
| 
								 | 
							
								            private static System.Xml.XmlQualifiedName artificialWrapper = new System.Xml.XmlQualifiedName("wrapper", "");
							 | 
						|||
| 
								 | 
							
								            
							 | 
						|||
| 
								 | 
							
								            public CFContractSerializer(CFContractSerializerInfo info)
							 | 
						|||
| 
								 | 
							
								            {
							 | 
						|||
| 
								 | 
							
								                this.info = info;
							 | 
						|||
| 
								 | 
							
								                if ((this.info.ExtraTypes == null))
							 | 
						|||
| 
								 | 
							
								                {
							 | 
						|||
| 
								 | 
							
								                    this.info.ExtraTypes = new System.Type[0];
							 | 
						|||
| 
								 | 
							
								                }
							 | 
						|||
| 
								 | 
							
								                this.createSerializer(null);
							 | 
						|||
| 
								 | 
							
								            }
							 | 
						|||
| 
								 | 
							
								            
							 | 
						|||
| 
								 | 
							
								            private void createSerializer(System.Xml.XmlQualifiedName wrapper)
							 | 
						|||
| 
								 | 
							
								            {
							 | 
						|||
| 
								 | 
							
								                if ((wrapper == null))
							 | 
						|||
| 
								 | 
							
								                {
							 | 
						|||
| 
								 | 
							
								                    if (((this.info.IsWrapped == false) 
							 | 
						|||
| 
								 | 
							
								                                && this.info.IsResponse))
							 | 
						|||
| 
								 | 
							
								                    {
							 | 
						|||
| 
								 | 
							
								                        wrapper = artificialWrapper;
							 | 
						|||
| 
								 | 
							
								                    }
							 | 
						|||
| 
								 | 
							
								                }
							 | 
						|||
| 
								 | 
							
								                if (this.info.UseEncoded)
							 | 
						|||
| 
								 | 
							
								                {
							 | 
						|||
| 
								 | 
							
								                    System.Xml.Serialization.SoapAttributeOverrides overrides = new System.Xml.Serialization.SoapAttributeOverrides();
							 | 
						|||
| 
								 | 
							
								                    if ((wrapper != null))
							 | 
						|||
| 
								 | 
							
								                    {
							 | 
						|||
| 
								 | 
							
								                        System.Xml.Serialization.SoapAttributes attributes = new System.Xml.Serialization.SoapAttributes();
							 | 
						|||
| 
								 | 
							
								                        attributes.SoapType = new System.Xml.Serialization.SoapTypeAttribute(wrapper.Name, wrapper.Namespace);
							 | 
						|||
| 
								 | 
							
								                        overrides.Add(this.info.MessageContractType, attributes);
							 | 
						|||
| 
								 | 
							
								                    }
							 | 
						|||
| 
								 | 
							
								                    System.Xml.Serialization.SoapReflectionImporter soapImporter = new System.Xml.Serialization.SoapReflectionImporter(overrides, this.info.DefaultNamespace);
							 | 
						|||
| 
								 | 
							
								                    for (int i = 0; (i < this.info.ExtraTypes.Length); i = (i + 1))
							 | 
						|||
| 
								 | 
							
								                    {
							 | 
						|||
| 
								 | 
							
								                        soapImporter.IncludeType(this.info.ExtraTypes[i]);
							 | 
						|||
| 
								 | 
							
								                    }
							 | 
						|||
| 
								 | 
							
								                    System.Xml.Serialization.XmlTypeMapping mapping = soapImporter.ImportTypeMapping(this.info.MessageContractType);
							 | 
						|||
| 
								 | 
							
								                    this.serializer = new System.Xml.Serialization.XmlSerializer(mapping);
							 | 
						|||
| 
								 | 
							
								                }
							 | 
						|||
| 
								 | 
							
								                else
							 | 
						|||
| 
								 | 
							
								                {
							 | 
						|||
| 
								 | 
							
								                    System.Xml.Serialization.XmlRootAttribute rootAttr = null;
							 | 
						|||
| 
								 | 
							
								                    if ((wrapper != null))
							 | 
						|||
| 
								 | 
							
								                    {
							 | 
						|||
| 
								 | 
							
								                        rootAttr = new System.Xml.Serialization.XmlRootAttribute();
							 | 
						|||
| 
								 | 
							
								                        rootAttr.ElementName = wrapper.Name;
							 | 
						|||
| 
								 | 
							
								                        rootAttr.Namespace = wrapper.Namespace;
							 | 
						|||
| 
								 | 
							
								                    }
							 | 
						|||
| 
								 | 
							
								                    this.serializer = new System.Xml.Serialization.XmlSerializer(this.info.MessageContractType, null, this.info.ExtraTypes, rootAttr, this.info.DefaultNamespace);
							 | 
						|||
| 
								 | 
							
								                }
							 | 
						|||
| 
								 | 
							
								            }
							 | 
						|||
| 
								 | 
							
								            
							 | 
						|||
| 
								 | 
							
								            public override bool IsStartObject(System.Xml.XmlDictionaryReader reader)
							 | 
						|||
| 
								 | 
							
								            {
							 | 
						|||
| 
								 | 
							
								                throw new System.NotImplementedException();
							 | 
						|||
| 
								 | 
							
								            }
							 | 
						|||
| 
								 | 
							
								            
							 | 
						|||
| 
								 | 
							
								            public override object ReadObject(System.Xml.XmlDictionaryReader reader, bool verifyObjectName)
							 | 
						|||
| 
								 | 
							
								            {
							 | 
						|||
| 
								 | 
							
								                if ((verifyObjectName == false))
							 | 
						|||
| 
								 | 
							
								                {
							 | 
						|||
| 
								 | 
							
								                    throw new System.NotSupportedException();
							 | 
						|||
| 
								 | 
							
								                }
							 | 
						|||
| 
								 | 
							
								                if (this.info.IsWrapped)
							 | 
						|||
| 
								 | 
							
								                {
							 | 
						|||
| 
								 | 
							
								                    // Some WSDLs incorrectly advertise their response message namespaces.
							 | 
						|||
| 
								 | 
							
								                    // Attempt to interop with these by coercing our expected namespace to match.
							 | 
						|||
| 
								 | 
							
								                    if ((this.serializer.CanDeserialize(reader) == false))
							 | 
						|||
| 
								 | 
							
								                    {
							 | 
						|||
| 
								 | 
							
								                        this.createSerializer(new System.Xml.XmlQualifiedName(System.Xml.XmlConvert.DecodeName(reader.LocalName), reader.NamespaceURI));
							 | 
						|||
| 
								 | 
							
								                    }
							 | 
						|||
| 
								 | 
							
								                    return this.serializer.Deserialize(reader);
							 | 
						|||
| 
								 | 
							
								                }
							 | 
						|||
| 
								 | 
							
								                else
							 | 
						|||
| 
								 | 
							
								                {
							 | 
						|||
| 
								 | 
							
								                    System.IO.MemoryStream ms = new System.IO.MemoryStream();
							 | 
						|||
| 
								 | 
							
								                    System.Xml.XmlWriterSettings settings = new System.Xml.XmlWriterSettings();
							 | 
						|||
| 
								 | 
							
								                    settings.OmitXmlDeclaration = true;
							 | 
						|||
| 
								 | 
							
								                    System.Xml.XmlWriter innerWriter = System.Xml.XmlDictionaryWriter.Create(ms, settings);
							 | 
						|||
| 
								 | 
							
								                    innerWriter.WriteStartElement(artificialWrapper.Name, artificialWrapper.Namespace);
							 | 
						|||
| 
								 | 
							
								                    string[] commonPrefixes = new string[] {
							 | 
						|||
| 
								 | 
							
								                            "xsi",
							 | 
						|||
| 
								 | 
							
								                            "xsd"};
							 | 
						|||
| 
								 | 
							
								                    for (int i = 0; (i < commonPrefixes.Length); i = (i + 1))
							 | 
						|||
| 
								 | 
							
								                    {
							 | 
						|||
| 
								 | 
							
								                        string ns = reader.LookupNamespace(commonPrefixes[i]);
							 | 
						|||
| 
								 | 
							
								                        if ((ns != null))
							 | 
						|||
| 
								 | 
							
								                        {
							 | 
						|||
| 
								 | 
							
								                            innerWriter.WriteAttributeString("xmlns", commonPrefixes[i], null, ns);
							 | 
						|||
| 
								 | 
							
								                        }
							 | 
						|||
| 
								 | 
							
								                    }
							 | 
						|||
| 
								 | 
							
								                    for (
							 | 
						|||
| 
								 | 
							
								                    ; ((reader.NodeType == System.Xml.XmlNodeType.EndElement) 
							 | 
						|||
| 
								 | 
							
								                                == false); 
							 | 
						|||
| 
								 | 
							
								                    )
							 | 
						|||
| 
								 | 
							
								                    {
							 | 
						|||
| 
								 | 
							
								                        innerWriter.WriteNode(reader, false);
							 | 
						|||
| 
								 | 
							
								                    }
							 | 
						|||
| 
								 | 
							
								                    innerWriter.WriteEndElement();
							 | 
						|||
| 
								 | 
							
								                    innerWriter.Close();
							 | 
						|||
| 
								 | 
							
								                    ms.Position = 0;
							 | 
						|||
| 
								 | 
							
								                    System.Xml.XmlReader innerReader = System.Xml.XmlDictionaryReader.Create(ms);
							 | 
						|||
| 
								 | 
							
								                    return this.serializer.Deserialize(innerReader);
							 | 
						|||
| 
								 | 
							
								                }
							 | 
						|||
| 
								 | 
							
								            }
							 | 
						|||
| 
								 | 
							
								            
							 | 
						|||
| 
								 | 
							
								            public override void WriteStartObject(System.Xml.XmlDictionaryWriter writer, object graph)
							 | 
						|||
| 
								 | 
							
								            {
							 | 
						|||
| 
								 | 
							
								                throw new System.NotImplementedException();
							 | 
						|||
| 
								 | 
							
								            }
							 | 
						|||
| 
								 | 
							
								            
							 | 
						|||
| 
								 | 
							
								            public override void WriteObjectContent(System.Xml.XmlDictionaryWriter writer, object graph)
							 | 
						|||
| 
								 | 
							
								            {
							 | 
						|||
| 
								 | 
							
								                throw new System.NotImplementedException();
							 | 
						|||
| 
								 | 
							
								            }
							 | 
						|||
| 
								 | 
							
								            
							 | 
						|||
| 
								 | 
							
								            public override void WriteEndObject(System.Xml.XmlDictionaryWriter writer)
							 | 
						|||
| 
								 | 
							
								            {
							 | 
						|||
| 
								 | 
							
								                throw new System.NotImplementedException();
							 | 
						|||
| 
								 | 
							
								            }
							 | 
						|||
| 
								 | 
							
								            
							 | 
						|||
| 
								 | 
							
								            public override void WriteObject(System.Xml.XmlDictionaryWriter writer, object graph)
							 | 
						|||
| 
								 | 
							
								            {
							 | 
						|||
| 
								 | 
							
								                if (this.info.IsWrapped)
							 | 
						|||
| 
								 | 
							
								                {
							 | 
						|||
| 
								 | 
							
								                    this.serializer.Serialize(writer, graph);
							 | 
						|||
| 
								 | 
							
								                }
							 | 
						|||
| 
								 | 
							
								                else
							 | 
						|||
| 
								 | 
							
								                {
							 | 
						|||
| 
								 | 
							
								                    System.IO.MemoryStream ms = new System.IO.MemoryStream();
							 | 
						|||
| 
								 | 
							
								                    System.Xml.XmlWriterSettings settings = new System.Xml.XmlWriterSettings();
							 | 
						|||
| 
								 | 
							
								                    settings.OmitXmlDeclaration = true;
							 | 
						|||
| 
								 | 
							
								                    System.Xml.XmlWriter innerWriter = System.Xml.XmlDictionaryWriter.Create(ms, settings);
							 | 
						|||
| 
								 | 
							
								                    this.serializer.Serialize(innerWriter, graph);
							 | 
						|||
| 
								 | 
							
								                    innerWriter.Close();
							 | 
						|||
| 
								 | 
							
								                    ms.Position = 0;
							 | 
						|||
| 
								 | 
							
								                    System.Xml.XmlReader innerReader = System.Xml.XmlDictionaryReader.Create(ms);
							 | 
						|||
| 
								 | 
							
								                    innerReader.Read();
							 | 
						|||
| 
								 | 
							
								                    writer.WriteAttributes(innerReader, false);
							 | 
						|||
| 
								 | 
							
								                    if ((innerReader.IsEmptyElement == false))
							 | 
						|||
| 
								 | 
							
								                    {
							 | 
						|||
| 
								 | 
							
								                        innerReader.Read();
							 | 
						|||
| 
								 | 
							
								                        for (
							 | 
						|||
| 
								 | 
							
								                        ; ((innerReader.NodeType == System.Xml.XmlNodeType.EndElement) 
							 | 
						|||
| 
								 | 
							
								                                    == false); 
							 | 
						|||
| 
								 | 
							
								                        )
							 | 
						|||
| 
								 | 
							
								                        {
							 | 
						|||
| 
								 | 
							
								                            writer.WriteNode(innerReader, false);
							 | 
						|||
| 
								 | 
							
								                        }
							 | 
						|||
| 
								 | 
							
								                    }
							 | 
						|||
| 
								 | 
							
								                    innerReader.Close();
							 | 
						|||
| 
								 | 
							
								                }
							 | 
						|||
| 
								 | 
							
								            }
							 | 
						|||
| 
								 | 
							
								        }
							 | 
						|||
| 
								 | 
							
								        
							 | 
						|||
| 
								 | 
							
								        protected struct CFContractSerializerInfo
							 | 
						|||
| 
								 | 
							
								        {
							 | 
						|||
| 
								 | 
							
								            
							 | 
						|||
| 
								 | 
							
								            public System.Type MessageContractType;
							 | 
						|||
| 
								 | 
							
								            
							 | 
						|||
| 
								 | 
							
								            public bool IsWrapped;
							 | 
						|||
| 
								 | 
							
								            
							 | 
						|||
| 
								 | 
							
								            public bool IsResponse;
							 | 
						|||
| 
								 | 
							
								            
							 | 
						|||
| 
								 | 
							
								            public System.Type[] ExtraTypes;
							 | 
						|||
| 
								 | 
							
								            
							 | 
						|||
| 
								 | 
							
								            public string DefaultNamespace;
							 | 
						|||
| 
								 | 
							
								            
							 | 
						|||
| 
								 | 
							
								            public bool UseEncoded;
							 | 
						|||
| 
								 | 
							
								        }
							 | 
						|||
| 
								 | 
							
								        
							 | 
						|||
| 
								 | 
							
								        protected class CFInvokeInfo
							 | 
						|||
| 
								 | 
							
								        {
							 | 
						|||
| 
								 | 
							
								            
							 | 
						|||
| 
								 | 
							
								            public string Action;
							 | 
						|||
| 
								 | 
							
								            
							 | 
						|||
| 
								 | 
							
								            public string ReplyAction;
							 | 
						|||
| 
								 | 
							
								            
							 | 
						|||
| 
								 | 
							
								            public bool IsOneWay;
							 | 
						|||
| 
								 | 
							
								            
							 | 
						|||
| 
								 | 
							
								            public bool RequestIsWrapped;
							 | 
						|||
| 
								 | 
							
								            
							 | 
						|||
| 
								 | 
							
								            public bool ResponseIsWrapped;
							 | 
						|||
| 
								 | 
							
								            
							 | 
						|||
| 
								 | 
							
								            public System.Type[] ExtraTypes;
							 | 
						|||
| 
								 | 
							
								            
							 | 
						|||
| 
								 | 
							
								            public bool UseEncoded;
							 | 
						|||
| 
								 | 
							
								            
							 | 
						|||
| 
								 | 
							
								            public override bool Equals(object obj)
							 | 
						|||
| 
								 | 
							
								            {
							 | 
						|||
| 
								 | 
							
								                if (((obj != null) 
							 | 
						|||
| 
								 | 
							
								                            && (obj.GetType() == typeof(CFInvokeInfo))))
							 | 
						|||
| 
								 | 
							
								                {
							 | 
						|||
| 
								 | 
							
								                    return (this.Action == ((CFInvokeInfo)(obj)).Action);
							 | 
						|||
| 
								 | 
							
								                }
							 | 
						|||
| 
								 | 
							
								                return false;
							 | 
						|||
| 
								 | 
							
								            }
							 | 
						|||
| 
								 | 
							
								            
							 | 
						|||
| 
								 | 
							
								            public override int GetHashCode()
							 | 
						|||
| 
								 | 
							
								            {
							 | 
						|||
| 
								 | 
							
								                if ((this.Action != null))
							 | 
						|||
| 
								 | 
							
								                {
							 | 
						|||
| 
								 | 
							
								                    return this.Action.GetHashCode();
							 | 
						|||
| 
								 | 
							
								                }
							 | 
						|||
| 
								 | 
							
								                else
							 | 
						|||
| 
								 | 
							
								                {
							 | 
						|||
| 
								 | 
							
								                    return base.GetHashCode();
							 | 
						|||
| 
								 | 
							
								                }
							 | 
						|||
| 
								 | 
							
								            }
							 | 
						|||
| 
								 | 
							
								        }
							 | 
						|||
| 
								 | 
							
								    }
							 | 
						|||
| 
								 | 
							
								    
							 | 
						|||
| 
								 | 
							
								    public class CFFaultException : System.ServiceModel.CommunicationException
							 | 
						|||
| 
								 | 
							
								    {
							 | 
						|||
| 
								 | 
							
								        
							 | 
						|||
| 
								 | 
							
								        private string _faultMessage;
							 | 
						|||
| 
								 | 
							
								        
							 | 
						|||
| 
								 | 
							
								        public CFFaultException(string faultMessage)
							 | 
						|||
| 
								 | 
							
								        {
							 | 
						|||
| 
								 | 
							
								            this._faultMessage = faultMessage;
							 | 
						|||
| 
								 | 
							
								        }
							 | 
						|||
| 
								 | 
							
								        
							 | 
						|||
| 
								 | 
							
								        public string FaultMessage
							 | 
						|||
| 
								 | 
							
								        {
							 | 
						|||
| 
								 | 
							
								            get
							 | 
						|||
| 
								 | 
							
								            {
							 | 
						|||
| 
								 | 
							
								                return this._faultMessage;
							 | 
						|||
| 
								 | 
							
								            }
							 | 
						|||
| 
								 | 
							
								        }
							 | 
						|||
| 
								 | 
							
								    }
							 | 
						|||
| 
								 | 
							
								}
							 |