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);
}
}