Exemplo n.º 1
0
        public static void ReplaceFormatterBehavior(OperationDescription operationDescription,
                                                    IWcfMessageEncodingController messageEncodingController, ServiceEndpoint endpoint)
        {
            // look for and remove the DataContract behavior if it is present
            IOperationBehavior formatterBehavior =
                operationDescription.Behaviors.Remove <DataContractSerializerOperationBehavior>();

            if (formatterBehavior == null)
            {
                // look for and remove the XmlSerializer behavior if it is present
                formatterBehavior = operationDescription.Behaviors.Remove <XmlSerializerOperationBehavior>();
                if (formatterBehavior == null)
                {
                    // look for delegating formatter behavior
                    var contextFormatterBehavior = operationDescription.Behaviors.Find <WcfContextFormatterBehavior>();
                    if (contextFormatterBehavior == null)
                    {
                        throw new InvalidOperationException(
                                  "Could not find DataContractFormatter or XmlSerializer on the contract");
                    }
                }
            }
            operationDescription.Behaviors.Insert(0,
                                                  new WcfContextFormatterBehavior(formatterBehavior, messageEncodingController, endpoint));
        }
Exemplo n.º 2
0
 public WcfContextFormatterBehavior(IOperationBehavior innerFormatterBehavior,
                                    IWcfMessageEncodingController messageEncodingController, ServiceEndpoint endpoint)
 {
     _innerFormatterBehavior = innerFormatterBehavior;
     _endpoint = endpoint;
     _messageEncodingController = messageEncodingController;
 }
Exemplo n.º 3
0
        // This method runs validators (both builtin and ones in description).
        // Precondition: EnsureInvariants() should already have been called.
        void Validate(bool runOperationValidators, bool isForService)
        {
            // contract behaviors
            ContractDescription contract = Contract;

            for (int j = 0; j < contract.ContractBehaviors.Count; j++)
            {
                IContractBehavior iContractBehavior = contract.ContractBehaviors[j];
                iContractBehavior.Validate(contract, this);
            }
            // endpoint behaviors
            for (int j = 0; j < EndpointBehaviors.Count; j++)
            {
                IEndpointBehavior ieb = EndpointBehaviors[j];
                ieb.Validate(this);
            }
            // operation behaviors
            if (runOperationValidators)
            {
                for (int j = 0; j < contract.Operations.Count; j++)
                {
                    OperationDescription op = contract.Operations[j];
                    TaskOperationDescriptionValidator.Validate(op, isForService);
                    for (int k = 0; k < op.OperationBehaviors.Count; k++)
                    {
                        IOperationBehavior iob = op.OperationBehaviors[k];
                        iob.Validate(op);
                    }
                }
            }
        }
Exemplo n.º 4
0
        public static void ReplaceFormatterBehavior(OperationDescription operationDescription, EndpointAddress address)
        {
            // look for and remove the DataContract behavior if it is present
            IOperationBehavior formatterBehavior = operationDescription.Behaviors.Remove <DataContractSerializerOperationBehavior>();

            if (formatterBehavior == null)
            {
                // look for and remove the XmlSerializer behavior if it is present
                formatterBehavior = operationDescription.Behaviors.Remove <XmlSerializerOperationBehavior>();
                if (formatterBehavior == null)
                {
                    // look for delegating formatter behavior
                    DelegatingFormatterBehavior existingDelegatingFormatterBehavior = operationDescription.Behaviors.Find <DelegatingFormatterBehavior>();
                    if (existingDelegatingFormatterBehavior == null)
                    {
                        throw new InvalidOperationException("Could not find DataContractFormatter or XmlSerializer on the contract");
                    }
                }
            }

            //remember what the innerFormatterBehavior was
            DelegatingFormatterBehavior delegatingFormatterBehavior = new DelegatingFormatterBehavior(address);

            delegatingFormatterBehavior.InnerFormatterBehavior = formatterBehavior;
            operationDescription.Behaviors.Add(delegatingFormatterBehavior);
        }
Exemplo n.º 5
0
 private static void TryGetSurrogateBehavior(OperationDescription operationDescription, ref IOperationBehavior original, ref IOperationBehavior surrogate)
 {
     if (!IsUntypedMessage(operationDescription.Messages[0]) &&
         operationDescription.Messages[0].Body.Parts.Count != 0)
     {
         var webGetAttribute = operationDescription.Behaviors.Find<WebGetAttribute>();
         if (webGetAttribute != null)
         {
             original = webGetAttribute;
             surrogate = new WebInvokeAttribute {
                  BodyStyle = webGetAttribute.BodyStyle,
                  Method = "NONE",
                  RequestFormat = webGetAttribute.RequestFormat,
                  ResponseFormat = webGetAttribute.ResponseFormat,
                  UriTemplate = webGetAttribute.UriTemplate };
         }
         else
         {
             var webInvokeAttribute = operationDescription.Behaviors.Find<WebInvokeAttribute>();
             if (webInvokeAttribute != null && webInvokeAttribute.Method == "GET")
             {
                 original = webInvokeAttribute;
                 surrogate = new WebInvokeAttribute {
                     BodyStyle = webInvokeAttribute.BodyStyle,
                     Method = "NONE",
                     RequestFormat = webInvokeAttribute.RequestFormat,
                     ResponseFormat = webInvokeAttribute.ResponseFormat,
                     UriTemplate = webInvokeAttribute.UriTemplate };
             }
         }
     }
 }
Exemplo n.º 6
0
 protected MessageContractExporter(WsdlExporter exporter, WsdlContractConversionContext context, OperationDescription operation, IOperationBehavior extension)
 {
     this.exporter        = exporter;
     this.contractContext = context;
     this.operation       = operation;
     this.extension       = extension;
 }
 protected MessageContractExporter(WsdlExporter exporter, WsdlContractConversionContext context, OperationDescription operation, IOperationBehavior extension)
 {
     this.exporter = exporter;
     this.contractContext = context;
     this.operation = operation;
     this.extension = extension;
 }
Exemplo n.º 8
0
        private static bool IsDefaultOperationBehavior(IOperationBehavior behavior)
        {
            Debug.Assert(behavior != null, "Parameter must not be null.");
            string name = behavior.GetType().FullName;

            return(defaultOperationBehaviorNames.Contains(name));
        }
Exemplo n.º 9
0
        private static Uri GetOperationInfo(MethodInfo operation,
                                            Uri baseAddress,
                                            out string method,
                                            out IOperationBehavior webbehavior, //out WebInvokeAttribute webinvoke,
                                            out OperationContractAttribute operationcontract,
                                            out WebMessageFormat requestformat,
                                            out WebMessageFormat responseformat)
        {
            var customAttributes = operation.GetCustomAttributes(false);

            webbehavior =
                customAttributes.Single(a => a is WebInvokeAttribute || a is WebGetAttribute) as IOperationBehavior;
            operationcontract =
                customAttributes.Single(a => a is OperationContractAttribute) as OperationContractAttribute;
            if (webbehavior is WebInvokeAttribute)
            {
                requestformat  = ((WebInvokeAttribute)webbehavior).RequestFormat;
                responseformat = ((WebInvokeAttribute)webbehavior).ResponseFormat;
                var relative = new Uri(((WebInvokeAttribute)webbehavior).UriTemplate, UriKind.Relative);
                var endpoint = new Uri(baseAddress, relative);
                method = ((WebInvokeAttribute)webbehavior).Method;
                return(endpoint);
            }
            if (webbehavior is WebGetAttribute)
            {
                requestformat  = ((WebGetAttribute)webbehavior).RequestFormat;
                responseformat = ((WebGetAttribute)webbehavior).ResponseFormat;
                var relative = new Uri(((WebGetAttribute)webbehavior).UriTemplate, UriKind.Relative);
                var endpoint = new Uri(baseAddress, relative);
                method = "GET";
                return(endpoint);
            }
            throw new NotSupportedException(webbehavior.GetType().FullName + " is not supported.");
        }
 private void SetBehaviors()
 {
     ValidationBehavior validation = new ValidationBehavior(true, false, ruleSet);
     endpointBehavior = (IEndpointBehavior)validation;
     contractBehavior = (IContractBehavior)validation;
     operationBehavior = (IOperationBehavior)validation;
 }
Exemplo n.º 11
0
        //public static ISearchManager GetSearchManagerFromAddress(string address)
        //{
        //    string tabName = GetWindowTabNameFromAddress(address);
        //    if (string.IsNullOrEmpty(tabName))
        //        return null;

        //    return GetSearchManagerFromWindowTab(tabName);
        //}

        internal static void CopyAttributeBehaviors(ServiceDescription description, Type[] behaviorTypes, string derivedMethodName, string[] operationNames)
        {
            Type       serviceType      = description.ServiceType;
            MethodInfo getEntriesMethod = serviceType.GetMethod(derivedMethodName, BindingFlags.FlattenHierarchy | BindingFlags.Instance | BindingFlags.NonPublic);

            foreach (Type behaviorType in behaviorTypes)
            {
                object[] attrs = getEntriesMethod.GetCustomAttributes(behaviorType, true);
                if (attrs != null && attrs.Length > 0)
                {
                    IOperationBehavior attrAsBehavior = (IOperationBehavior)attrs[0];
                    foreach (ServiceEndpoint endpoint in description.Endpoints)
                    {
                        foreach (OperationDescription od in endpoint.Contract.Operations)
                        {
                            if (operationNames.Contains(od.Name))
                            {
                                od.Behaviors.Remove(behaviorType);
                                od.Behaviors.Add(attrAsBehavior);
                            }
                        }
                    }
                }
            }
        }
Exemplo n.º 12
0
        private void SetBehaviors()
        {
            ValidatingBehavior validation = new ValidatingBehavior(true, false, Ruleset);

            _endpointBehavior  = (IEndpointBehavior)validation;
            _contractBehavior  = (IContractBehavior)validation;
            _operationBehavior = (IOperationBehavior)validation;
        }
        private void SetBehaviors()
        {
            ValidationBehavior validation = new ValidationBehavior(true, false, ruleSet);

            endpointBehavior  = (IEndpointBehavior)validation;
            contractBehavior  = (IContractBehavior)validation;
            operationBehavior = (IOperationBehavior)validation;
        }
Exemplo n.º 14
0
        public void ApplyDispatchBehavior(OperationDescription description,
                                          DispatchOperation dispatch)
        {
            _curBehavior = new CustomDataContractSerializerOperationBehavior(description);
            IOperationBehavior innerBehavior = _curBehavior;

            innerBehavior.ApplyDispatchBehavior(description, dispatch);
        }
Exemplo n.º 15
0
        public void ApplyClientBehavior(OperationDescription description,
                                        ClientOperation proxy)
        {
            _curBehavior = new CustomDataContractSerializerOperationBehavior(description);
            IOperationBehavior innerBehavior = _curBehavior;

            innerBehavior.ApplyClientBehavior(description, proxy);
        }
Exemplo n.º 16
0
 // ────────────────────────── Private Members ──────────────────────────
 private static void SwapBehaviors(OperationDescription operationDescription, IOperationBehavior remove, IOperationBehavior add)
 {
     if (remove != null && add != null)
     {
         operationDescription.Behaviors.Remove(remove);
         operationDescription.Behaviors.Add(add);
     }
 }
Exemplo n.º 17
0
 private static void SwapBehaviors(OperationDescription operationDescription, IOperationBehavior remove, IOperationBehavior add)
 {
     if (remove != null && add != null)
     {
         operationDescription.Behaviors.Remove(remove);
         operationDescription.Behaviors.Add(add);
     }
 }
Exemplo n.º 18
0
        static void BindOperations(ContractDescription contract, ClientRuntime proxy, DispatchRuntime dispatch)
        {
            if (!(((proxy == null) != (dispatch == null))))
            {
                throw Fx.AssertAndThrowFatal("DispatcherBuilder.BindOperations: ((proxy == null) != (dispatch == null))");
            }

            MessageDirection local = (proxy == null) ? MessageDirection.Input : MessageDirection.Output;

            for (int i = 0; i < contract.Operations.Count; i++)
            {
                OperationDescription operation = contract.Operations[i];
                MessageDescription   first     = operation.Messages[0];

                if (first.Direction != local)
                {
                    if (proxy == null)
                    {
                        proxy = dispatch.CallbackClientRuntime;
                    }

                    ClientOperation proxyOperation = proxy.Operations[operation.Name];
                    Fx.Assert(proxyOperation != null, "");

                    for (int j = 0; j < operation.Behaviors.Count; j++)
                    {
                        IOperationBehavior behavior = operation.Behaviors[j];
                        behavior.ApplyClientBehavior(operation, proxyOperation);
                    }
                }
                else
                {
                    if (dispatch == null)
                    {
                        dispatch = proxy.CallbackDispatchRuntime;
                    }

                    DispatchOperation dispatchOperation = null;
                    if (dispatch.Operations.Contains(operation.Name))
                    {
                        dispatchOperation = dispatch.Operations[operation.Name];
                    }
                    if (dispatchOperation == null && dispatch.UnhandledDispatchOperation != null && dispatch.UnhandledDispatchOperation.Name == operation.Name)
                    {
                        dispatchOperation = dispatch.UnhandledDispatchOperation;
                    }

                    if (dispatchOperation != null)
                    {
                        for (int j = 0; j < operation.Behaviors.Count; j++)
                        {
                            IOperationBehavior behavior = operation.Behaviors[j];
                            behavior.ApplyDispatchBehavior(operation, dispatchOperation);
                        }
                    }
                }
            }
        }
 static void FillBehaviorInfo(IOperationBehavior behavior, IWmiInstance existingInstance, out IWmiInstance instance)
 {
     Fx.Assert(null != existingInstance, "");
     Fx.Assert(null != behavior, "");
     instance = null;
     if (behavior is DataContractSerializerOperationBehavior)
     {
         instance = existingInstance.NewInstance("DataContractSerializerOperationBehavior");
         DataContractSerializerOperationBehavior specificBehavior = (DataContractSerializerOperationBehavior)behavior;
         instance.SetProperty(AdministrationStrings.IgnoreExtensionDataObject, specificBehavior.IgnoreExtensionDataObject);
         instance.SetProperty(AdministrationStrings.MaxItemsInObjectGraph, specificBehavior.MaxItemsInObjectGraph);
         if (null != specificBehavior.DataContractFormatAttribute)
         {
             instance.SetProperty(AdministrationStrings.Style, specificBehavior.DataContractFormatAttribute.Style.ToString());
         }
     }
     else if (behavior is OperationBehaviorAttribute)
     {
         instance = existingInstance.NewInstance("OperationBehaviorAttribute");
         OperationBehaviorAttribute specificBehavior = (OperationBehaviorAttribute)behavior;
         instance.SetProperty(AdministrationStrings.AutoDisposeParameters, specificBehavior.AutoDisposeParameters);
         instance.SetProperty(AdministrationStrings.Impersonation, specificBehavior.Impersonation.ToString());
         instance.SetProperty(AdministrationStrings.ReleaseInstanceMode, specificBehavior.ReleaseInstanceMode.ToString());
         instance.SetProperty(AdministrationStrings.TransactionAutoComplete, specificBehavior.TransactionAutoComplete);
         instance.SetProperty(AdministrationStrings.TransactionScopeRequired, specificBehavior.TransactionScopeRequired);
     }
     else if (behavior is TransactionFlowAttribute)
     {
         instance = existingInstance.NewInstance("TransactionFlowAttribute");
         TransactionFlowAttribute specificBehavior = (TransactionFlowAttribute)behavior;
         instance.SetProperty(AdministrationStrings.TransactionFlowOption, specificBehavior.Transactions.ToString());
     }
     else if (behavior is XmlSerializerOperationBehavior)
     {
         instance = existingInstance.NewInstance("XmlSerializerOperationBehavior");
         XmlSerializerOperationBehavior specificBehavior = (XmlSerializerOperationBehavior)behavior;
         if (null != specificBehavior.XmlSerializerFormatAttribute)
         {
             instance.SetProperty(AdministrationStrings.Style, specificBehavior.XmlSerializerFormatAttribute.Style.ToString());
             instance.SetProperty(AdministrationStrings.Use, specificBehavior.XmlSerializerFormatAttribute.Use.ToString());
             instance.SetProperty(AdministrationStrings.SupportFaults, specificBehavior.XmlSerializerFormatAttribute.SupportFaults.ToString());
         }
     }
     else if (behavior is IWmiInstanceProvider)
     {
         IWmiInstanceProvider instanceProvider = (IWmiInstanceProvider)behavior;
         instance = existingInstance.NewInstance(instanceProvider.GetInstanceType());
         instanceProvider.FillInstance(instance);
     }
     else
     {
         instance = existingInstance.NewInstance("Behavior");
     }
     if (null != instance)
     {
         instance.SetProperty(AdministrationStrings.Type, behavior.GetType().FullName);
     }
 }
 private static void FillBehaviorInfo(IOperationBehavior behavior, IWmiInstance existingInstance, out IWmiInstance instance)
 {
     instance = null;
     if (behavior is DataContractSerializerOperationBehavior)
     {
         instance = existingInstance.NewInstance("DataContractSerializerOperationBehavior");
         DataContractSerializerOperationBehavior behavior2 = (DataContractSerializerOperationBehavior)behavior;
         instance.SetProperty("IgnoreExtensionDataObject", behavior2.IgnoreExtensionDataObject);
         instance.SetProperty("MaxItemsInObjectGraph", behavior2.MaxItemsInObjectGraph);
         if (behavior2.DataContractFormatAttribute != null)
         {
             instance.SetProperty("Style", behavior2.DataContractFormatAttribute.Style.ToString());
         }
     }
     else if (behavior is OperationBehaviorAttribute)
     {
         instance = existingInstance.NewInstance("OperationBehaviorAttribute");
         OperationBehaviorAttribute attribute = (OperationBehaviorAttribute)behavior;
         instance.SetProperty("AutoDisposeParameters", attribute.AutoDisposeParameters);
         instance.SetProperty("Impersonation", attribute.Impersonation.ToString());
         instance.SetProperty("ReleaseInstanceMode", attribute.ReleaseInstanceMode.ToString());
         instance.SetProperty("TransactionAutoComplete", attribute.TransactionAutoComplete);
         instance.SetProperty("TransactionScopeRequired", attribute.TransactionScopeRequired);
     }
     else if (behavior is TransactionFlowAttribute)
     {
         instance = existingInstance.NewInstance("TransactionFlowAttribute");
         TransactionFlowAttribute attribute2 = (TransactionFlowAttribute)behavior;
         instance.SetProperty("TransactionFlowOption", attribute2.Transactions.ToString());
     }
     else if (behavior is XmlSerializerOperationBehavior)
     {
         instance = existingInstance.NewInstance("XmlSerializerOperationBehavior");
         XmlSerializerOperationBehavior behavior3 = (XmlSerializerOperationBehavior)behavior;
         if (behavior3.XmlSerializerFormatAttribute != null)
         {
             instance.SetProperty("Style", behavior3.XmlSerializerFormatAttribute.Style.ToString());
             instance.SetProperty("Use", behavior3.XmlSerializerFormatAttribute.Use.ToString());
             instance.SetProperty("SupportFaults", behavior3.XmlSerializerFormatAttribute.SupportFaults.ToString());
         }
     }
     else if (behavior is IWmiInstanceProvider)
     {
         IWmiInstanceProvider provider = (IWmiInstanceProvider)behavior;
         instance = existingInstance.NewInstance(provider.GetInstanceType());
         provider.FillInstance(instance);
     }
     else
     {
         instance = existingInstance.NewInstance("Behavior");
     }
     if (instance != null)
     {
         instance.SetProperty("Type", behavior.GetType().FullName);
     }
 }
 private static void FillBehaviorInfo(IOperationBehavior behavior, IWmiInstance existingInstance, out IWmiInstance instance)
 {
     instance = null;
     if (behavior is DataContractSerializerOperationBehavior)
     {
         instance = existingInstance.NewInstance("DataContractSerializerOperationBehavior");
         DataContractSerializerOperationBehavior behavior2 = (DataContractSerializerOperationBehavior) behavior;
         instance.SetProperty("IgnoreExtensionDataObject", behavior2.IgnoreExtensionDataObject);
         instance.SetProperty("MaxItemsInObjectGraph", behavior2.MaxItemsInObjectGraph);
         if (behavior2.DataContractFormatAttribute != null)
         {
             instance.SetProperty("Style", behavior2.DataContractFormatAttribute.Style.ToString());
         }
     }
     else if (behavior is OperationBehaviorAttribute)
     {
         instance = existingInstance.NewInstance("OperationBehaviorAttribute");
         OperationBehaviorAttribute attribute = (OperationBehaviorAttribute) behavior;
         instance.SetProperty("AutoDisposeParameters", attribute.AutoDisposeParameters);
         instance.SetProperty("Impersonation", attribute.Impersonation.ToString());
         instance.SetProperty("ReleaseInstanceMode", attribute.ReleaseInstanceMode.ToString());
         instance.SetProperty("TransactionAutoComplete", attribute.TransactionAutoComplete);
         instance.SetProperty("TransactionScopeRequired", attribute.TransactionScopeRequired);
     }
     else if (behavior is TransactionFlowAttribute)
     {
         instance = existingInstance.NewInstance("TransactionFlowAttribute");
         TransactionFlowAttribute attribute2 = (TransactionFlowAttribute) behavior;
         instance.SetProperty("TransactionFlowOption", attribute2.Transactions.ToString());
     }
     else if (behavior is XmlSerializerOperationBehavior)
     {
         instance = existingInstance.NewInstance("XmlSerializerOperationBehavior");
         XmlSerializerOperationBehavior behavior3 = (XmlSerializerOperationBehavior) behavior;
         if (behavior3.XmlSerializerFormatAttribute != null)
         {
             instance.SetProperty("Style", behavior3.XmlSerializerFormatAttribute.Style.ToString());
             instance.SetProperty("Use", behavior3.XmlSerializerFormatAttribute.Use.ToString());
             instance.SetProperty("SupportFaults", behavior3.XmlSerializerFormatAttribute.SupportFaults.ToString());
         }
     }
     else if (behavior is IWmiInstanceProvider)
     {
         IWmiInstanceProvider provider = (IWmiInstanceProvider) behavior;
         instance = existingInstance.NewInstance(provider.GetInstanceType());
         provider.FillInstance(instance);
     }
     else
     {
         instance = existingInstance.NewInstance("Behavior");
     }
     if (instance != null)
     {
         instance.SetProperty("Type", behavior.GetType().FullName);
     }
 }
 public void ApplyDispatchBehavior(ServiceDescription serviceDescription, ServiceHostBase serviceHostBase)
 {
     foreach (ServiceEndpoint endpoint in serviceDescription.Endpoints)
     {
         foreach (OperationDescription operation in endpoint.Contract.Operations)
         {
             IOperationBehavior behavior = this.CreateOperationBehavior();
             operation.Behaviors.Add(behavior);
         }
     }
 }
Exemplo n.º 23
0
 public void ApplyDispatchBehavior(ContractDescription contractDescription, ServiceEndpoint endpoint, System.ServiceModel.Dispatcher.DispatchRuntime dispatchRuntime)
 {
     _ob = _ob ?? CreateBehavior(contractDescription.Name);
     if (_ob == null)
     {
         throw new ArgumentException("no behavior instance was found to inject");
     }
     foreach (OperationDescription opDescription in contractDescription.Operations)
     {
         opDescription.Behaviors.Add(_ob);
     }
 }
Exemplo n.º 24
0
 public void ApplyDispatchBehavior(ServiceEndpoint endpoint, EndpointDispatcher endpointDispatcher)
 {
     foreach (OperationDescription operation in endpoint.Contract.Operations)
     {
         IOperationBehavior serializerBehavior = operation.Behaviors.Find <XmlSerializerOperationBehavior>();
         if (null == serializerBehavior)
         {
             serializerBehavior = operation.Behaviors.Find <DataContractSerializerOperationBehavior>();
         }
         serializerBehavior.ApplyDispatchBehavior(operation, endpointDispatcher.DispatchRuntime.Operations[operation.Name]);
     }
     foreach (DispatchOperation operation in endpointDispatcher.DispatchRuntime.Operations)
     {
         operation.Formatter = new CompressionMessageFormatter(this.MessageCompressor, operation.Formatter, null);
     }
 }
Exemplo n.º 25
0
        public void ApplyClientBehavior(ServiceEndpoint endpoint, ClientRuntime clientRuntime)
        {
            foreach (OperationDescription operation in endpoint.Contract.Operations)
            {
                IOperationBehavior serializerBehavior = operation.Behaviors.Find <XmlSerializerOperationBehavior>();
                if (null == serializerBehavior)
                {
                    serializerBehavior = operation.Behaviors.Find <DataContractSerializerOperationBehavior>();
                }
                serializerBehavior.ApplyClientBehavior(operation, clientRuntime.Operations[operation.Name]);
            }

            foreach (ClientOperation operation in clientRuntime.Operations)
            {
                operation.Formatter = new CompressionMessageFormatter(this.MessageCompressor, null, operation.Formatter);
            }
        }
Exemplo n.º 26
0
        protected override IDispatchMessageFormatter GetRequestDispatchFormatter(OperationDescription operationDescription, ServiceEndpoint endpoint)
        {
            IOperationBehavior originalBehavior  = null;
            IOperationBehavior surrogateBehavior = null;

            TryGetSurrogateBehavior(operationDescription,
                                    ref originalBehavior,
                                    ref surrogateBehavior);

            SwapBehaviors(operationDescription, originalBehavior, surrogateBehavior);

            var formatter = base.GetRequestDispatchFormatter(operationDescription, endpoint);

            SwapBehaviors(operationDescription, surrogateBehavior, originalBehavior);

            return(formatter);
        }
Exemplo n.º 27
0
        public void ApplyDispatchBehavior(ServiceEndpoint endpoint, EndpointDispatcher endpointDispatcher)
        {
            foreach (OperationDescription opDesc in endpoint.Contract.Operations)
            {
                IEnumerable <IOperationBehavior> webBehs =
                    (from webbehavior in opDesc.OperationBehaviors
                     where webbehavior is WebGetAttribute || webbehavior is WebInvokeAttribute
                     select webbehavior);

                if (webBehs.Count <IOperationBehavior>() == 0)
                {
                    IOperationBehavior webBeh = null;
                    if (!RESTOperationBehaviors.TryGetValue(opDesc.Name, out webBeh))
                    {
                        webBeh = new WebGetAttribute();
                    }
                    opDesc.OperationBehaviors.Add(webBeh);
                }
            }
        }
Exemplo n.º 28
0
        // This method runs validators (both builtin and ones in description).
        // Precondition: EnsureInvariants() should already have been called.
        void Validate(bool runOperationValidators, bool isForService)
        {
            // contract behaviors
            ContractDescription contract = this.Contract;

            for (int j = 0; j < contract.Behaviors.Count; j++)
            {
                IContractBehavior iContractBehavior = contract.Behaviors[j];
                iContractBehavior.Validate(contract, this);
            }
            // endpoint behaviors
            if (!isForService)
            {
                (PartialTrustValidationBehavior.Instance as IEndpointBehavior).Validate(this);
#pragma warning disable 0618
                (PeerValidationBehavior.Instance as IEndpointBehavior).Validate(this);
#pragma warning restore 0618
                (TransactionValidationBehavior.Instance as IEndpointBehavior).Validate(this);
                (SecurityValidationBehavior.Instance as IEndpointBehavior).Validate(this);
                (System.ServiceModel.MsmqIntegration.MsmqIntegrationValidationBehavior.Instance as IEndpointBehavior).Validate(this);
            }
            for (int j = 0; j < this.Behaviors.Count; j++)
            {
                IEndpointBehavior ieb = this.Behaviors[j];
                ieb.Validate(this);
            }
            // operation behaviors
            if (runOperationValidators)
            {
                for (int j = 0; j < contract.Operations.Count; j++)
                {
                    OperationDescription op = contract.Operations[j];
                    TaskOperationDescriptionValidator.Validate(op, isForService);
                    for (int k = 0; k < op.Behaviors.Count; k++)
                    {
                        IOperationBehavior iob = op.Behaviors[k];
                        iob.Validate(op);
                    }
                }
            }
        }
Exemplo n.º 29
0
    public void ApplyClientBehavior(OperationDescription operationDescription, ClientOperation clientOperation)
    {
        //var serializerBehavior = operationDescription.Behaviors.Find<DataContractSerializerOperationBehavior>();
        IOperationBehavior serializerBehavior = operationDescription.Behaviors.Find <XmlSerializerOperationBehavior>();

        if (serializerBehavior == null)
        {
            serializerBehavior = operationDescription.Behaviors.Find <DataContractSerializerOperationBehavior>();
        }

        if (clientOperation.Formatter == null)
        {
            serializerBehavior.ApplyClientBehavior(operationDescription, clientOperation);
        }

        IClientMessageFormatter innerClientFormatter = clientOperation.Formatter;

        clientOperation.Formatter = new EnvelopeNamespaceMessageFormatter(innerClientFormatter)
        {
            EnvelopeNamespaces = EnvelopeNamespaces
        };
    }
 internal DataContractSerializerMessageContractExporter(WsdlExporter exporter, WsdlContractConversionContext context, OperationDescription operation, IOperationBehavior extension) : base(exporter, context, operation, extension)
 {
 }
 public DelegatingFormatterBehavior(EndpointAddress address, IOperationBehavior innerFormatterBehavior)
 {
     this.endpointAddress        = address;
     this.innerFormatterBehavior = innerFormatterBehavior;
 }
 internal DataContractSerializerMessageContractExporter(WsdlExporter exporter, WsdlContractConversionContext context, OperationDescription operation, IOperationBehavior extension) : base(exporter, context, operation, extension)
 {
 }
Exemplo n.º 33
0
 private static void SetAuthorizationInvokerBehavior(ServiceHostBase serviceHost, IOperationBehavior authorizationInvokerBehavior)
 {
     serviceHost.Opening += (sender, args) =>
     {
         foreach (var ep in serviceHost.Description.Endpoints)
         {
             foreach (var od in ep.Contract.Operations)
             {
                 od.OperationBehaviors.Add(authorizationInvokerBehavior);
             }
         }
     };
 }
Exemplo n.º 34
0
        public static void Configure(ServiceHostBase serviceHost, ServiceAuthenticationManager authenticationManager, IEnumerable <IAuthorizationPolicy> authorizationPolicies, IOperationBehavior authorizationInvokerBehavior, IServiceBehavior errorBehavior)
        {
            SetAuthentication(serviceHost, authenticationManager, authorizationPolicies);

            SetAuthorizationInvokerBehavior(serviceHost, authorizationInvokerBehavior);

            SetErrorHandlers(serviceHost, errorBehavior);
        }
 static void FillBehaviorInfo(IOperationBehavior behavior, IWmiInstance existingInstance, out IWmiInstance instance)
 {
     Fx.Assert(null != existingInstance, "");
     Fx.Assert(null != behavior, "");
     instance = null;
     if (behavior is DataContractSerializerOperationBehavior)
     {
         instance = existingInstance.NewInstance("DataContractSerializerOperationBehavior");
         DataContractSerializerOperationBehavior specificBehavior = (DataContractSerializerOperationBehavior)behavior;
         instance.SetProperty(AdministrationStrings.IgnoreExtensionDataObject, specificBehavior.IgnoreExtensionDataObject);
         instance.SetProperty(AdministrationStrings.MaxItemsInObjectGraph, specificBehavior.MaxItemsInObjectGraph);
         if (null != specificBehavior.DataContractFormatAttribute)
         {
             instance.SetProperty(AdministrationStrings.Style, specificBehavior.DataContractFormatAttribute.Style.ToString());
         }
     }
     else if (behavior is OperationBehaviorAttribute)
     {
         instance = existingInstance.NewInstance("OperationBehaviorAttribute");
         OperationBehaviorAttribute specificBehavior = (OperationBehaviorAttribute)behavior;
         instance.SetProperty(AdministrationStrings.AutoDisposeParameters, specificBehavior.AutoDisposeParameters);
         instance.SetProperty(AdministrationStrings.Impersonation, specificBehavior.Impersonation.ToString());
         instance.SetProperty(AdministrationStrings.ReleaseInstanceMode, specificBehavior.ReleaseInstanceMode.ToString());
         instance.SetProperty(AdministrationStrings.TransactionAutoComplete, specificBehavior.TransactionAutoComplete);
         instance.SetProperty(AdministrationStrings.TransactionScopeRequired, specificBehavior.TransactionScopeRequired);
     }
     else if (behavior is TransactionFlowAttribute)
     {
         instance = existingInstance.NewInstance("TransactionFlowAttribute");
         TransactionFlowAttribute specificBehavior = (TransactionFlowAttribute)behavior;
         instance.SetProperty(AdministrationStrings.TransactionFlowOption, specificBehavior.Transactions.ToString());
     }
     else if (behavior is XmlSerializerOperationBehavior)
     {
         instance = existingInstance.NewInstance("XmlSerializerOperationBehavior");
         XmlSerializerOperationBehavior specificBehavior = (XmlSerializerOperationBehavior)behavior;
         if (null != specificBehavior.XmlSerializerFormatAttribute)
         {
             instance.SetProperty(AdministrationStrings.Style, specificBehavior.XmlSerializerFormatAttribute.Style.ToString());
             instance.SetProperty(AdministrationStrings.Use, specificBehavior.XmlSerializerFormatAttribute.Use.ToString());
             instance.SetProperty(AdministrationStrings.SupportFaults, specificBehavior.XmlSerializerFormatAttribute.SupportFaults.ToString());
         }
     }
     else if (behavior is IWmiInstanceProvider)
     {
         IWmiInstanceProvider instanceProvider = (IWmiInstanceProvider)behavior;
         instance = existingInstance.NewInstance(instanceProvider.GetInstanceType());
         instanceProvider.FillInstance(instance);
     }
     else
     {
         instance = existingInstance.NewInstance("Behavior");
     }
     if (null != instance)
     {
         instance.SetProperty(AdministrationStrings.Type, behavior.GetType().FullName);
     }
 }
 public DelegatingFormatterBehavior(EndpointAddress address, IOperationBehavior innerFormatterBehavior)
 {
     this.endpointAddress = address;
     this.innerFormatterBehavior = innerFormatterBehavior;
 }
Exemplo n.º 37
0
 private static void TryGetSurrogateBehavior(OperationDescription operationDescription, ref IOperationBehavior original, ref IOperationBehavior surrogate)
 {
     if (!IsUntypedMessage(operationDescription.Messages[0]) &&
         operationDescription.Messages[0].Body.Parts.Count != 0)
     {
         var webGetAttribute = operationDescription.Behaviors.Find <WebGetAttribute>();
         if (webGetAttribute != null)
         {
             original  = webGetAttribute;
             surrogate = new WebInvokeAttribute {
                 BodyStyle      = webGetAttribute.BodyStyle,
                 Method         = "NONE",
                 RequestFormat  = webGetAttribute.RequestFormat,
                 ResponseFormat = webGetAttribute.ResponseFormat,
                 UriTemplate    = webGetAttribute.UriTemplate
             };
         }
         else
         {
             var webInvokeAttribute = operationDescription.Behaviors.Find <WebInvokeAttribute>();
             if (webInvokeAttribute != null && webInvokeAttribute.Method == "GET")
             {
                 original  = webInvokeAttribute;
                 surrogate = new WebInvokeAttribute {
                     BodyStyle      = webInvokeAttribute.BodyStyle,
                     Method         = "NONE",
                     RequestFormat  = webInvokeAttribute.RequestFormat,
                     ResponseFormat = webInvokeAttribute.ResponseFormat,
                     UriTemplate    = webInvokeAttribute.UriTemplate
                 };
             }
         }
     }
 }
Exemplo n.º 38
0
 /// <summary>
 /// Add an operation behavior to the description
 /// </summary>
 public void AddOperationBehavior(IOperationBehavior behavior)
 {
     this.m_operationBehaviors.Add(behavior);
 }