//------------------------------------------------------------------------------ // // Copyright (c) Microsoft Corporation. All rights reserved. // //------------------------------------------------------------------------------ namespace System.Web.Services { using System; using System.ComponentModel; using System.Web.Services.Protocols; using System.Runtime.InteropServices; /// /// /// [To be supplied.] /// [AttributeUsage(AttributeTargets.Class | AttributeTargets.Interface, AllowMultiple = true)] public sealed class WebServiceBindingAttribute : Attribute { string name; string ns; string location; WsiProfiles claims = WsiProfiles.None; bool emitClaims; /// /// /// [To be supplied.] /// public WebServiceBindingAttribute() { } /// /// /// [To be supplied.] /// public WebServiceBindingAttribute(string name) { this.name = name; } /// /// /// [To be supplied.] /// public WebServiceBindingAttribute(string name, string ns) { this.name = name; this.ns = ns; } /// /// /// [To be supplied.] /// public WebServiceBindingAttribute(string name, string ns, string location) { this.name = name; this.ns = ns; this.location = location; } /// /// /// [To be supplied.] /// public WsiProfiles ConformsTo { get { return claims; } set { claims = value; } } /// /// /// [To be supplied.] /// public bool EmitConformanceClaims { get { return emitClaims; } set { emitClaims = value; } } /// /// /// [To be supplied.] /// public string Location { get { return location == null ? string.Empty : location; } set { location = value; } } /// /// /// [To be supplied.] /// public string Name { get { return name == null ? string.Empty : name; } set { name = value; } } /// /// /// [To be supplied.] /// public string Namespace { get { return ns == null ? string.Empty : ns; } set { ns = value; } } } internal class WebServiceBindingReflector { private WebServiceBindingReflector() { } internal static WebServiceBindingAttribute GetAttribute(Type type) { for (; type != null; type = type.BaseType) { object[] attrs = type.GetCustomAttributes(typeof(WebServiceBindingAttribute), false); if (attrs.Length == 0) continue; if (attrs.Length > 1) throw new ArgumentException(Res.GetString(Res.OnlyOneWebServiceBindingAttributeMayBeSpecified1, type.FullName), "type"); return (WebServiceBindingAttribute)attrs[0]; } return null; } internal static WebServiceBindingAttribute GetAttribute(LogicalMethodInfo methodInfo, string binding) { if (methodInfo.Binding != null) { if (binding.Length > 0 && methodInfo.Binding.Name != binding) throw new InvalidOperationException(Res.GetString(Res.WebInvalidBindingName, binding, methodInfo.Binding.Name)); return methodInfo.Binding; } Type type = methodInfo.DeclaringType; object[] attrs = type.GetCustomAttributes(typeof(WebServiceBindingAttribute), false); WebServiceBindingAttribute webAttr = null; foreach (WebServiceBindingAttribute attr in attrs) { if (attr.Name == binding) { if (webAttr != null) throw new ArgumentException(Res.GetString(Res.MultipleBindingsWithSameName2, type.FullName, binding, "methodInfo")); webAttr = attr; } } if (webAttr == null && binding != null && binding.Length > 0) throw new ArgumentException(Res.GetString(Res.TypeIsMissingWebServiceBindingAttributeThat2, type.FullName, binding), "methodInfo"); return webAttr; } } }