本文整理汇总了C#中System.ServiceModel.Description.ContractDescription.GetInheritedContracts方法的典型用法代码示例。如果您正苦于以下问题:C# ContractDescription.GetInheritedContracts方法的具体用法?C# ContractDescription.GetInheritedContracts怎么用?C# ContractDescription.GetInheritedContracts使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类System.ServiceModel.Description.ContractDescription
的用法示例。
在下文中一共展示了ContractDescription.GetInheritedContracts方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。
示例1: GetContractInternal
internal static ContractDescription GetContractInternal (Type givenContractType, Type givenServiceType, Type serviceTypeForCallback)
{
// FIXME: serviceType should be used for specifying attributes like OperationBehavior.
Type exactContractType = null;
ServiceContractAttribute sca = null;
Dictionary<Type, ServiceContractAttribute> contracts =
GetServiceContractAttributes (serviceTypeForCallback ?? givenServiceType ?? givenContractType);
if (contracts.ContainsKey (givenContractType)) {
exactContractType = givenContractType;
sca = contracts [givenContractType];
} else {
foreach (Type t in contracts.Keys)
if (t.IsAssignableFrom(givenContractType)) {
if (t.IsAssignableFrom (exactContractType)) // exact = IDerived, t = IBase
continue;
if (sca != null && (exactContractType == null || !exactContractType.IsAssignableFrom (t))) // t = IDerived, exact = IBase
throw new InvalidOperationException ("The contract type of " + givenContractType + " is ambiguous: can be either " + exactContractType + " or " + t);
exactContractType = t;
sca = contracts [t];
}
}
if (exactContractType == null)
exactContractType = givenContractType;
if (sca == null) {
if (serviceTypeForCallback != null)
sca = contracts.Values.First ();
else
return null; // no contract
}
string name = sca.Name ?? exactContractType.Name;
string ns = sca.Namespace ?? "http://tempuri.org/";
ContractDescription cd =
new ContractDescription (name, ns);
cd.ContractType = exactContractType;
cd.CallbackContractType = sca.CallbackContract;
cd.SessionMode = sca.SessionMode;
if (sca.ConfigurationName != null)
cd.ConfigurationName = sca.ConfigurationName;
else
cd.ConfigurationName = exactContractType.FullName;
if (sca.HasProtectionLevel)
cd.ProtectionLevel = sca.ProtectionLevel;
foreach (var icd in cd.GetInheritedContracts ()) {
FillOperationsForInterface (icd, icd.ContractType, givenServiceType, false);
foreach (var od in icd.Operations)
cd.Operations.Add (od);
}
FillOperationsForInterface (cd, cd.ContractType, givenServiceType, false);
if (cd.CallbackContractType != null && cd.CallbackContractType != cd.ContractType)
FillOperationsForInterface (cd, cd.CallbackContractType, null, true);
// FIXME: enable this when I found where this check is needed.
/*
if (cd.Operations.Count == 0)
throw new InvalidOperationException (String.Format ("The service contract type {0} has no operation. At least one operation must exist.", contractType));
*/
return cd;
}