File: WebServiceAttribute.cs

package info (click to toggle)
mono 6.8.0.105%2Bdfsg-3.3
  • links: PTS, VCS
  • area: main
  • in suites: bookworm
  • size: 1,284,512 kB
  • sloc: cs: 11,172,132; xml: 2,850,069; ansic: 671,653; cpp: 122,091; perl: 59,366; javascript: 30,841; asm: 22,168; makefile: 20,093; sh: 15,020; python: 4,827; pascal: 925; sql: 859; sed: 16; php: 1
file content (106 lines) | stat: -rw-r--r-- 4,302 bytes parent folder | download | duplicates (7)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
//------------------------------------------------------------------------------
// <copyright file="WebServiceAttribute.cs" company="Microsoft">
//     Copyright (c) Microsoft Corporation.  All rights reserved.
// </copyright>                                                                
//------------------------------------------------------------------------------

namespace System.Web.Services {

    using System;
    using System.Web.Services.Protocols;

    /// <include file='doc\WebServiceAttribute.uex' path='docs/doc[@for="WebServiceAttribute"]/*' />
    /// <devdoc>
    ///    <para> The WebService attribute may be used to add additional information to a
    ///       Web Service, such as a string describing its functionality. The attribute is not required for a Web Service to
    ///       be published and executed.</para>
    /// </devdoc>
    [AttributeUsage(AttributeTargets.Class | AttributeTargets.Interface)]
    public sealed class WebServiceAttribute : Attribute {
        string description;
        string ns = DefaultNamespace;
        string name;

        /// <include file='doc\WebServiceAttribute.uex' path='docs/doc[@for="WebServiceAttribute.WebServiceAttribute"]/*' />
        /// <devdoc>
        ///    Initializes a new instance of the <see cref='System.Web.Services.WebServiceAttribute'/> class.
        /// </devdoc>
        public WebServiceAttribute() {
        }

        /// <include file='doc\WebServiceAttribute.uex' path='docs/doc[@for="WebServiceAttribute.Description"]/*' />
        /// <devdoc>
        ///    A descriptive message for the Web Service. The message
        ///    is used when generating description documents for the Web Service, such as the
        ///    Sevice Contract and the Service Description page.
        /// </devdoc>
        public string Description {
            get {
                return (description == null) ? string.Empty : description;
            }

            set {
                description = value;
            }
        }

        /// <include file='doc\WebServiceAttribute.uex' path='docs/doc[@for="WebServiceAttribute.Namespace"]/*' />
        /// <devdoc>
        /// The default XML namespace to use for the web service.
        /// </devdoc>
        public string Namespace {
            get {
                return ns;
            }
            set {
                ns = value;
            }
        }

        /// <include file='doc\WebServiceAttribute.uex' path='docs/doc[@for="WebServiceAttribute.Name"]/*' />
        /// <devdoc>
        /// The name to use for the web service in the service description.
        /// </devdoc>
        public string Name {
            get {
                return name == null ? string.Empty : name;
            }
            set {
                name = value;
            }
        }

        /// <include file='doc\WebServiceAttribute.uex' path='docs/doc[@for="WebServiceAttribute.DefaultNamespace"]/*' />
        /// <devdoc>
        /// The default value for the XmlNamespace property.
        /// </devdoc>
        public const string DefaultNamespace = "http://tempuri.org/";
    }

    internal class WebServiceReflector {
        private WebServiceReflector() { }
        internal static WebServiceAttribute GetAttribute(Type type) {
            object[] attrs = type.GetCustomAttributes(typeof(WebServiceAttribute), false);
            if (attrs.Length == 0) return new WebServiceAttribute();
            return (WebServiceAttribute)attrs[0];
        }

        internal static WebServiceAttribute GetAttribute(LogicalMethodInfo[] methodInfos) {
            if (methodInfos.Length == 0) return new WebServiceAttribute();
            Type mostDerived = GetMostDerivedType(methodInfos);
            return GetAttribute(mostDerived);
        }

        internal static Type GetMostDerivedType(LogicalMethodInfo[] methodInfos) {
            if (methodInfos.Length == 0) return null;
            Type mostDerived = methodInfos[0].DeclaringType;
            for (int i = 1; i < methodInfos.Length; i++) {
                Type derived = methodInfos[i].DeclaringType;
                if (derived.IsSubclassOf(mostDerived)) {
                    mostDerived = derived;
                }
            }
            return mostDerived;
        }
    }
}