//<snippet1>
        // <snippet6>
        public void ExportContract(WsdlExporter exporter, WsdlContractConversionContext context)
        {
            // </snippet6>
            // <snippet5>
            // Add a custom DCAnnotationSurrogate to write data contract comments into the XSD.
            object dataContractExporter;
            XsdDataContractExporter xsdDCExporter;

            if (!exporter.State.TryGetValue(typeof(XsdDataContractExporter), out dataContractExporter))
            {
                xsdDCExporter = new XsdDataContractExporter(exporter.GeneratedXmlSchemas);
                exporter.State.Add(typeof(XsdDataContractExporter), xsdDCExporter);
            }
            else
            {
                xsdDCExporter = (XsdDataContractExporter)dataContractExporter;
            }

            if (xsdDCExporter.Options == null)
            {
                xsdDCExporter.Options = new ExportOptions();
            }
            xsdDCExporter.Options.DataContractSurrogate = new DCAnnotationSurrogate();
            // </snippet5>
            // <snippet7>
            Console.WriteLine("Inside ExportContract");
            if (context.Contract != null)
            {
                // Inside this block it is the contract-level comment attribute.
                // This.Text returns the string for the contract attribute.
                // Set the doc element; if this isn't done first, there is no XmlElement in the
                // DocumentElement property.
                context.WsdlPortType.Documentation = string.Empty;
                // Contract comments.
                XmlDocument owner          = context.WsdlPortType.DocumentationElement.OwnerDocument;
                XmlElement  summaryElement = Formatter.CreateSummaryElement(owner, this.Text);
                context.WsdlPortType.DocumentationElement.AppendChild(summaryElement);

                foreach (OperationDescription op in context.Contract.Operations)
                {
                    Operation operation = context.GetOperation(op);
                    object[]  opAttrs   = op.SyncMethod.GetCustomAttributes(typeof(WsdlDocumentationAttribute), false);
                    if (opAttrs.Length == 1)
                    {
                        string opComment = ((WsdlDocumentationAttribute)opAttrs[0]).Text;

                        // This.Text returns the string for the operation-level attributes.
                        // Set the doc element; if this isn't done first, there is no XmlElement in the
                        // DocumentElement property.
                        operation.Documentation = String.Empty;

                        // Operation C# triple comments.
                        XmlDocument opOwner           = operation.DocumentationElement.OwnerDocument;
                        XmlElement  newSummaryElement = Formatter.CreateSummaryElement(opOwner, opComment);
                        operation.DocumentationElement.AppendChild(newSummaryElement);

                        // Get returns information
                        ParameterInfo returnValue = op.SyncMethod.ReturnParameter;
                        object[]      returnAttrs = returnValue.GetCustomAttributes(typeof(WsdlParameterDocumentationAttribute), false);
                        if (returnAttrs.Length == 1)
                        {
                            // <returns>text.</returns>
                            XmlElement returnsElement =
                                Formatter.CreateReturnsElement(
                                    opOwner,
                                    ((WsdlParameterDocumentationAttribute)returnAttrs[0]).ParamComment
                                    );
                            operation.DocumentationElement.AppendChild(returnsElement);
                        }

                        // Get parameter information.
                        ParameterInfo[] args = op.SyncMethod.GetParameters();
                        for (int i = 0; i < args.Length; i++)
                        {
                            object[] docAttrs
                                = args[i].GetCustomAttributes(typeof(WsdlParameterDocumentationAttribute), false);
                            if (docAttrs.Length != 0)
                            {
                                // <param name="Int1">Text.</param>
                                XmlElement   newParamElement = opOwner.CreateElement("param");
                                XmlAttribute paramName       = opOwner.CreateAttribute("name");
                                paramName.Value = args[i].Name;
                                newParamElement.InnerText
                                    = ((WsdlParameterDocumentationAttribute)docAttrs[0]).ParamComment;
                                newParamElement.Attributes.Append(paramName);
                                operation.DocumentationElement.AppendChild(newParamElement);
                            }
                        }
                    }
                }
            }
            // </snippet7>
        }