System.ServiceModel.Description.ContractDescription.PopulateClientOperation C# (CSharp) Method

PopulateClientOperation() private method

private PopulateClientOperation ( ClientRuntime proxy, OperationDescription od, bool isCallback ) : void
proxy ClientRuntime
od OperationDescription
isCallback bool
return void
		void PopulateClientOperation (ClientRuntime proxy, OperationDescription od, bool isCallback)
		{
			string reqA = null, resA = null;
			foreach (MessageDescription m in od.Messages) {
				bool isReq = m.Direction == MessageDirection.Input ^ isCallback;
				if (isReq)
					reqA = m.Action;
				else
					resA = m.Action;
			}
			ClientOperation o =
				od.IsOneWay ?
				new ClientOperation (proxy, od.Name, reqA) :
				new ClientOperation (proxy, od.Name, reqA, resA);
			foreach (MessageDescription md in od.Messages) {
				bool isReq = md.Direction == MessageDirection.Input ^ isCallback;
				if (isReq &&
				    md.Body.Parts.Count == 1 &&
				    md.Body.Parts [0].Type == typeof (Message))
					o.SerializeRequest = false;
				if (!isReq &&
				    md.Body.ReturnValue != null &&
				    md.Body.ReturnValue.Type == typeof (Message))
					o.DeserializeReply = false;
			}
#if !NET_2_1
			foreach (var fd in od.Faults)
				o.FaultContractInfos.Add (new FaultContractInfo (fd.Action, fd.DetailType));
#endif

			// FIXME: at initialization time it does not seem to 
			// fill default formatter. It should be filled after
			// applying all behaviors. (Tthat causes regression, so
			// I don't care little compatibility difference so far)
			//
			// FIXME: pass correct isRpc, isEncoded
			o.Formatter = new OperationFormatter (od, false, false);

			proxy.Operations.Add (o);
		}
	}