System.ServiceModel.Description.ContractDescriptionGenerator.CreateMessageDescription C# (CSharp) Method

CreateMessageDescription() public static method

public static CreateMessageDescription ( System.ServiceModel.OperationContractAttribute oca, ParameterInfo plist, string name, string defaultNamespace, string action, bool isRequest, bool isCallback, Type retType, ICustomAttributeProvider retTypeAttributes ) : MessageDescription
oca System.ServiceModel.OperationContractAttribute
plist System.Reflection.ParameterInfo
name string
defaultNamespace string
action string
isRequest bool
isCallback bool
retType System.Type
retTypeAttributes ICustomAttributeProvider
return MessageDescription
		public static MessageDescription CreateMessageDescription (
			OperationContractAttribute oca, ParameterInfo[] plist, string name, string defaultNamespace, string action, bool isRequest, bool isCallback, Type retType, ICustomAttributeProvider retTypeAttributes)
		{
			var dir = isRequest ^ isCallback ? MessageDirection.Input : MessageDirection.Output;
			MessageDescription md = new MessageDescription (action, dir) { IsRequest = isRequest };

			MessageBodyDescription mb = md.Body;
			mb.WrapperName = name + (isRequest ? String.Empty : "Response");
			mb.WrapperNamespace = defaultNamespace;

			if (oca.HasProtectionLevel)
				md.ProtectionLevel = oca.ProtectionLevel;

			// Parts
			int index = 0;
			foreach (ParameterInfo pi in plist) {
				// AsyncCallback and state are extraneous.
				if (oca.AsyncPattern && pi.Position == plist.Length - 2)
					break;

				// They are ignored:
				// - out parameter in request
				// - neither out nor ref parameter in reply
				if (isRequest && pi.IsOut)
					continue;
				if (!isRequest && !pi.IsOut && !pi.ParameterType.IsByRef)
					continue;

				MessagePartDescription pd = CreatePartCore (GetMessageParameterAttribute (pi), pi.Name, defaultNamespace);
				pd.Index = index++;
				pd.Type = MessageFilterOutByRef (pi.ParameterType);
				mb.Parts.Add (pd);			
			}

			// ReturnValue
			if (!isRequest) {
				MessagePartDescription mp = CreatePartCore (GetMessageParameterAttribute (retTypeAttributes), name + "Result", mb.WrapperNamespace);
				mp.Index = 0;
				mp.Type = retType;
				mb.ReturnValue = mp;
			}

			// FIXME: fill properties.

			return md;
		}

Same methods

ContractDescriptionGenerator::CreateMessageDescription ( Type messageType, string defaultNamespace, string action, bool isRequest, bool isCallback, System.ServiceModel.MessageContractAttribute mca ) : MessageDescription

Usage Example

Example #1
0
        static MessageDescriptionCollection MessageContractToMessagesDescription(
            Type src, string defaultNamespace, string action)
        {
            MessageContractAttribute mca =
                ContractDescriptionGenerator.GetMessageContractAttribute(src);

            if (mca == null)
            {
                throw new ArgumentException(String.Format("Type {0} and its ancestor types do not have MessageContract attribute.", src));
            }

            MessageDescriptionCollection messages = new MessageDescriptionCollection();

            messages.Add(ContractDescriptionGenerator.CreateMessageDescription(src, defaultNamespace, action, true, mca));
            messages.Add(ContractDescriptionGenerator.CreateMessageDescription(src, defaultNamespace, action, false, mca));
            return(messages);
        }