Пример #1
0
        private ServiceEndpoint PrepareProxyAndGetServiceEndpoint(Type contractType)
        {
            var contractFullNameWithoutAssembly = String.Format("{0}.{1}", contractType.Namespace, contractType.Name);
            var endpointSetting = ConfigurationSettingsManager.GetServiceEndPointSetting(contractFullNameWithoutAssembly);

            if (endpointSetting == null)
            {
                string assemblyName = contractType.Assembly.GetName().Name;
                endpointSetting = ConfigurationSettingsManager.GetServiceEndPointSetting(assemblyName);
            }

            Type   bindingType = DefaultBindingType;
            string bindingConfigurationName = DefaultBindingConfigurationName;
            string endpointBaseAddress      = DefaultEndpointBaseUrl;

            if (endpointSetting != null)
            {
                if (!string.IsNullOrEmpty(endpointSetting.Binding))
                {
                    bindingType = Type.GetType((endpointSetting.Binding == "CustomBinding"
                        ? String.Format(
                                                    "System.ServiceModel.Channels.{0}, System.ServiceModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089",
                                                    endpointSetting.Binding)
                        : String.Format(
                                                    "System.ServiceModel.{0}, System.ServiceModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089",
                                                    endpointSetting.Binding)));
                }
                if (!string.IsNullOrEmpty(endpointSetting.BindingConfiguration))
                {
                    bindingConfigurationName = endpointSetting.BindingConfiguration;
                }
                if (!string.IsNullOrEmpty(endpointSetting.BaseAddress))
                {
                    endpointBaseAddress = endpointSetting.BaseAddress;
                }
            }

            var binding = string.IsNullOrEmpty(bindingConfigurationName)
                    ? (Binding)Activator.CreateInstance(bindingType)
                    : (Binding)Activator.CreateInstance(bindingType, bindingConfigurationName);

            var endPoint = new ServiceEndpoint(ContractDescription.GetContract(contractType),
                                               binding,
                                               new EndpointAddress(EndpointAddressResolver.Resolve(contractType, endpointBaseAddress)));

            if (DataContractSurrogateBehavior != null)
            {
                foreach (var operation in endPoint.Contract.Operations)
                {
                    operation.OperationBehaviors.Add(DataContractSurrogateBehavior);
                }
            }

            if (ClientMessageInspectorBehavior != null)
            {
                endPoint.EndpointBehaviors.Add((IEndpointBehavior)ClientMessageInspectorBehavior);
            }

            return(endPoint);
        }