private IServiceMap AddServiceMap(XName qualifiedName) { var operationDefinition = GetOperationDefinition(contractAssembly, qualifiedName); if (operationDefinition == null || qualifiedName.NamespaceName != operationDefinition.Name.NamespaceName) { throw new UnknownOperationException(qualifiedName); } var requestDefinition = schemaDefinitionProvider.GetRequestDefinition(operationDefinition); var inputTypeMap = GetParticleDefinitionTypeMap(requestDefinition, null); var outputTuple = GetReturnValueTypeMap(operationDefinition); var responseDefinition = outputTuple.Item1; var outputTypeMap = outputTuple.Item2; var serviceMap = (IServiceMap)Activator.CreateInstance( operationDefinition.ServiceMapType, this, operationDefinition, requestDefinition, responseDefinition, inputTypeMap, outputTypeMap ); return(serviceMaps.GetOrAdd(qualifiedName, serviceMap)); }