Example #1
0
        //<snippet1>
        private void Run()
        {
            WSHttpBinding b           = new WSHttpBinding(SecurityMode.Message);
            Uri           baseAddress = new Uri("http://localhost:1066/calculator");
            ServiceHost   sh          = new ServiceHost(typeof(Calculator), baseAddress);

            sh.AddServiceEndpoint(typeof(ICalculator), b, "");

            // Find the ContractDescription of the operation to find.
            ContractDescription  cd = sh.Description.Endpoints[0].Contract;
            OperationDescription myOperationDescription = cd.Operations.Find("Add");

            // Find the serializer behavior.
            XmlSerializerOperationBehavior serializerBehavior =
                myOperationDescription.Behaviors.
                Find <XmlSerializerOperationBehavior>();

            // If the serializer is not found, create one and add it.
            if (serializerBehavior == null)
            {
                serializerBehavior = new XmlSerializerOperationBehavior(myOperationDescription);
                myOperationDescription.Behaviors.Add(serializerBehavior);
            }

            // Change style of the serialize attribute.
            serializerBehavior.XmlSerializerFormatAttribute.Style = OperationFormatStyle.Document;

            sh.Open();
            Console.WriteLine("Listening");
            Console.ReadLine();
            sh.Close();
        }
Example #2
0
        private List <Type> CollectXmlSerializerTypes(Assembly assembly, List <XmlMapping> mappings)
        {
            List <Type> types = new List <Type>();

            ExportModule.ContractLoader contractLoader = new ExportModule.ContractLoader(new Assembly[] { assembly }, _isTypeExcluded);
            contractLoader.ContractLoadErrorCallback = delegate(Type contractType, string errorMessage)
            {
                ToolConsole.WriteWarning(SR.Format(SR.WrnUnableToLoadContractForSGen, contractType, errorMessage));
            };

            foreach (ContractDescription contract in contractLoader.GetContracts())
            {
                types.Add(contract.ContractType);
                foreach (OperationDescription operation in contract.Operations)
                {
                    XmlSerializerOperationBehavior behavior = operation.Behaviors.Find <XmlSerializerOperationBehavior>();
                    if (behavior != null)
                    {
                        foreach (XmlMapping map in behavior.GetXmlMappings())
                        {
                            mappings.Add(map);
                        }
                    }
                }
            }
            return(types);
        }
        void FixupProxyBehavior()
        {
            ClientOperation operation = null;

            if (useXmlSerializer)
            {
                XmlSerializerOperationBehavior.AddBehaviors(contractDescription);
            }

            foreach (OperationDescription opDesc in contractDescription.Operations)
            {
                operation = serviceChannelFactory.ClientRuntime.Operations[opDesc.Name];
                operation.SerializeRequest = true;
                operation.DeserializeReply = true;

                if (useXmlSerializer)
                {
                    operation.Formatter = XmlSerializerOperationBehavior.CreateOperationFormatter(opDesc);
                }
                else
                {
                    operation.Formatter = new DataContractSerializerOperationFormatter(opDesc, TypeLoader.DefaultDataContractFormatAttribute, null);
                }
            }
        }
 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);
     }
 }
Example #6
0
        private static void ValidateOperationDescription(OperationDescription operation)
        {
            Fx.Assert(operation != null, "The 'operationDescription' parameter should not be null.");

            // Ensure no operations with XmlSerializer Rpc style
            XmlSerializerOperationBehavior xmlSerializerOperationBehavior = operation.Behaviors.Find <XmlSerializerOperationBehavior>();

            if (xmlSerializerOperationBehavior != null &&
                (xmlSerializerOperationBehavior.XmlSerializerFormatAttribute.Style == OperationFormatStyle.Rpc))
            {
                throw Fx.Exception.AsError(
                          new InvalidOperationException(
                              SR.InvalidXmlSerializerFormatAttribute(
                                  operation.Name,
                                  operation.DeclaringContract.Name,
                                  xmlSerializerFormatAttributeType.Name)));
            }

            // Ensure operations don't have message headers
            if (operation.Messages[0].Headers.Count > 0 ||
                (operation.Messages.Count > 1 &&
                 operation.Messages[1].Headers.Count > 0))
            {
                throw Fx.Exception.AsError(
                          new InvalidOperationException(
                              SR.InvalidOperationWithMessageHeaders(
                                  operation.Name,
                                  operation.DeclaringContract.Name)));
            }

            // Ensure operations don't have typed messages
            if (operation.Messages[0].MessageType != null)
            {
                throw Fx.Exception.AsError(
                          new InvalidOperationException(
                              SR.InvalidMessageContractParameter(
                                  operation.Name,
                                  operation.DeclaringContract.Name,
                                  messageContractAttributeType.Name,
                                  operation.Messages[0].MessageType.Name)));
            }

            if (operation.Messages.Count > 1 &&
                operation.Messages[1].MessageType != null)
            {
                throw Fx.Exception.AsError(
                          new InvalidOperationException(
                              SR.InvalidMessageContractParameter(
                                  operation.Name,
                                  operation.DeclaringContract.Name,
                                  messageContractAttributeType.Name,
                                  operation.Messages[1].MessageType.Name)));
            }
        }
        public static SingleBodyParameterMessageFormatter CreateXmlFormatter(OperationDescription operation, Type type, bool isRequestFormatter, UnwrappedTypesXmlSerializerManager xmlSerializerManager)
        {
            DataContractSerializerOperationBehavior dcsob = operation.Behaviors.Find <DataContractSerializerOperationBehavior>();

            if (dcsob != null)
            {
                return(new SingleBodyParameterDataContractMessageFormatter(operation, type, isRequestFormatter, false, dcsob));
            }
            XmlSerializerOperationBehavior xsob = operation.Behaviors.Find <XmlSerializerOperationBehavior>();

            if (xsob != null)
            {
                return(new SingleBodyParameterXmlSerializerMessageFormatter(operation, type, isRequestFormatter, xsob, xmlSerializerManager));
            }
            throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new NotSupportedException(SR2.GetString(SR2.OnlyDataContractAndXmlSerializerTypesInUnWrappedMode, operation.Name)));
        }
Example #8
0
    public static void XmlSerializerOperationBehavior_BasicUsage()
    {
        XmlSerializerOperationBehavior serializerBehavior;
        BasicHttpBinding binding = new BasicHttpBinding();
        string baseAddress = "http://localhost:1066/SomeService";
        ChannelFactory<IXmlTestingType> factory = new ChannelFactory<IXmlTestingType>(binding, new EndpointAddress(baseAddress));
        ContractDescription cd = factory.Endpoint.Contract;
        OperationDescriptionCollection collection = cd.Operations;

        foreach (OperationDescription description in collection)
        {
            // Find the serializer behavior for those operations that have the attribute set via the interface.
            serializerBehavior = description.Behaviors.Find<XmlSerializerOperationBehavior>();
            if (serializerBehavior == null)
            {
                // This operation was not set with XmlSerializerFormatAttribute
                // Here we add the attribute programatically using defaults.
                if (String.Equals(description.Name, nameof(IXmlTestingType.XmlSerializerFormatAttribute_NotSet_One)))
                {
                    // Default OperationFormatStyle is "Document"
                    serializerBehavior = new XmlSerializerOperationBehavior(description);
                    description.Behaviors.Add(serializerBehavior);
                }
                // There is one additional operation not set with XmlSerializerFormatAttribute
                // Here we add the attribute programatically and further set the OperationFormatStyle to 'Rpc'
                else
                {
                    XmlSerializerFormatAttribute serializerAttribute = new XmlSerializerFormatAttribute();
                    serializerAttribute.Style = OperationFormatStyle.Rpc;

                    serializerBehavior = new XmlSerializerOperationBehavior(description, serializerAttribute);
                    description.Behaviors.Add(serializerBehavior);
                }

            }

            if (String.Equals(description.Name, nameof(IXmlTestingType.XmlSerializerFormatAttribute_Set_StyleSetTo_Rpc)) || (String.Equals(description.Name, nameof(IXmlTestingType.XmlSerializerFormatAttribute_NotSet_Two))))
            {
                Assert.True(String.Equals(serializerBehavior.XmlSerializerFormatAttribute.Style.ToString(), "Rpc"));
            }
            else
            {
                Assert.True(String.Equals(serializerBehavior.XmlSerializerFormatAttribute.Style.ToString(), "Document"));
            }
        }
    }
 public XmlRpcOperationFormatterBehavior(DataContractSerializerOperationBehavior dcs, XmlSerializerOperationBehavior xcs)
 {
     _dcs = dcs;
     _xcs = xcs;
 }
        public SingleBodyParameterXmlSerializerMessageFormatter(OperationDescription operation, Type parameterType, bool isRequestFormatter, XmlSerializerOperationBehavior xsob, UnwrappedTypesXmlSerializerManager serializerManager)
            : base(operation, isRequestFormatter, "XmlSerializer")
        {
            if (operation == null)
            {
                throw DiagnosticUtility.ExceptionUtility.ThrowHelperArgumentNull("operation");
            }
            if (parameterType == null)
            {
                throw DiagnosticUtility.ExceptionUtility.ThrowHelperArgumentNull("parameterType");
            }
            if (xsob == null)
            {
                throw DiagnosticUtility.ExceptionUtility.ThrowHelperArgumentNull("xsob");
            }
            if (serializerManager == null)
            {
                throw DiagnosticUtility.ExceptionUtility.ThrowHelperArgumentNull("serializerManager");
            }
            this.serializerManager = serializerManager;
            this.parameterType     = parameterType;
            List <Type> operationTypes = new List <Type>();

            operationTypes.Add(parameterType);
            this.knownTypes = new List <Type>();
            if (operation.KnownTypes != null)
            {
                foreach (Type knownType in operation.KnownTypes)
                {
                    this.knownTypes.Add(knownType);
                    operationTypes.Add(knownType);
                }
            }
            Type nullableType = SingleBodyParameterDataContractMessageFormatter.UnwrapNullableType(this.parameterType);

            if (nullableType != this.parameterType)
            {
                this.knownTypes.Add(nullableType);
                operationTypes.Add(nullableType);
            }
            this.serializerManager.RegisterType(this, operationTypes);
            thisLock = new Object();
        }
Example #11
0
            private static bool IsNotSoapEncoding(OperationDescription op)
            {
                XmlSerializerOperationBehavior behavior = op.Behaviors.Find <XmlSerializerOperationBehavior>();

                return(behavior == null || behavior.XmlSerializerFormatAttribute.Use != OperationFormatUse.Encoded);
            }